2012-05-04 44 views
0

XMLParser.Java安卓:如何解析XML属性

import java.io.IOException; 
import java.io.StringReader; 
import java.io.UnsupportedEncodingException; 
import java.util.jar.Attributes; 

import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 
import javax.xml.parsers.ParserConfigurationException; 

import org.apache.http.HttpEntity; 
import org.apache.http.HttpResponse; 
import org.apache.http.client.ClientProtocolException; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.apache.http.util.EntityUtils; 
import org.w3c.dom.Document; 
import org.w3c.dom.Element; 
import org.w3c.dom.Node; 
import org.w3c.dom.NodeList; 
import org.xml.sax.InputSource; 
import org.xml.sax.SAXException; 

import android.util.Log; 

public class XMLParser { 

    // constructor 
    public XMLParser() { 

    } 

    /** 
    * Getting XML from URL making HTTP request 
    * @param url string 
    * */ 
    public String getXmlFromUrl(String url) { 
     String xml = null; 

     try { 
      // defaultHttpClient 
      DefaultHttpClient httpClient = new DefaultHttpClient(); 
      HttpPost httpPost = new HttpPost(url); 

      HttpResponse httpResponse = httpClient.execute(httpPost); 
      HttpEntity httpEntity = httpResponse.getEntity(); 
      xml = EntityUtils.toString(httpEntity); 

     } catch (UnsupportedEncodingException e) { 
      e.printStackTrace(); 
     } catch (ClientProtocolException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     // return XML 
     return xml; 
    } 

    /** 
    * Getting XML DOM element 
    * @param XML string 
    * */ 
    public Document getDomElement(String xml){ 
     Document doc = null; 
     DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
     try { 

      DocumentBuilder db = dbf.newDocumentBuilder(); 

      InputSource is = new InputSource(); 
       is.setCharacterStream(new StringReader(xml)); 
       doc = db.parse(is); 

      } catch (ParserConfigurationException e) { 
       Log.e("Error: ", e.getMessage()); 
       return null; 
      } catch (SAXException e) { 
       Log.e("Error: ", e.getMessage()); 
       return null; 
      } catch (IOException e) { 
       Log.e("Error: ", e.getMessage()); 
       return null; 
      } 

      return doc; 
    } 

    /** Getting node value 
     * @param elem element 
     */ 
    public final String getElementValue(Node elem) { 
     Node child; 
     if(elem != null){ 
      if (elem.hasChildNodes()){ 
       for(child = elem.getFirstChild(); child != null; child = child.getNextSibling()){ 
        if(child.getNodeType() == Node.TEXT_NODE ){ 
         return child.getNodeValue(); 
        } 
       } 
      } 
     } 
     return ""; 
    } 

    /** 
     * Getting node value 
     * @param Element node 
     * @param key string 
     * */ 
    public String getValue(Element item, String str) {  
      NodeList n = item.getElementsByTagName(str);   
      return this.getElementValue(n.item(0)); 
     } 

} 

测试XML文件

http://sathishm.com/test.xml 

XMLActivity.java

// All static variables 
    static final String URL = "http://sathishm.com/test.xml"; 
    // XML node keys 
    static final String KEY_ITEM = "row"; // parent node 
    static final String KEY_ID = "rank"; 
    static final String KEY_NAME = "metro_area"; 
    static final String KEY_COST = "durum"; 
    static final String KEY_DESC = "latitude"; 

ArrayList<HashMap<String, String>> menuItems = new ArrayList<HashMap<String, String>>(); 

     XMLParser parser = new XMLParser(); 
     String xml = parser.getXmlFromUrl(URL); // getting XML 
     Document doc = parser.getDomElement(xml); // getting DOM element 

     NodeList nl = doc.getElementsByTagName(KEY_ITEM); 
     // looping through all item nodes <item> 
     for (int i = 0; i < nl.getLength(); i++) { 
      // creating new HashMap 
      HashMap<String, String> map = new HashMap<String, String>(); 
      Element e = (Element) nl.item(i); 
      // adding each child node to HashMap key => value 
      map.put(KEY_ID, parser.getValue(e, KEY_ID)); 
      map.put(KEY_NAME, parser.getValue(e, KEY_NAME)); 
      map.put(KEY_COST, "Rs." + parser.getValue(e, KEY_COST)); 
      map.put(KEY_DESC, parser.getValue(e, KEY_DESC)); 

      // adding HashList to ArrayList 
      menuItems.add(map); 
     } 

伙计们,请看XML文件。我可以从URL获取所有XML值,请告诉我如何获取XML属性。示例如何获取“位置”属性?

回答

0

使用的一些事情,如:

HttpEntity entity = response.getEntity(); 
InputStream input = entity.getContent(); 

andchange your method: 

getDomElement(InputStream xmlStream){ 

Document document = db.parse(xmlStream); 
} 

,并在您XMLActivity.java不喜欢

static final String URL = "http://sathishm.com/test.xml"; 
    // XML node keys 
    static final String KEY_ITEM = "row"; // parent node 
    static final String KEY_ID = "rank"; 
    static final String KEY_NAME = "metro_area"; 
    static final String KEY_COST = "durum"; 
    static final String KEY_DESC = "latitude"; 

ArrayList<HashMap<String, String>> menuItems = new ArrayList<HashMap<String, String>>(); 

     XMLParser parser = new XMLParser(); 
     InputStream stream = parser.getXmlFromUrl(URL); // getting XML 
     Document doc = parser.getDomElement(stream); // getting DOM element 

     NodeList nl = doc.getElementsByTagName(KEY_ITEM); 
     // looping through all item nodes <item> 
     for (int i = 0; i < nl.getLength(); i++) { 
      // creating new HashMap 
      HashMap<String, String> map = new HashMap<String, String>(); 
      Element e = (Element) nl.item(i); 
      NodeList childList=e.getElementByTagName("your tag"); 
      Element childElement=(Element)childList.item(0); 
      String value; 
      Node child = e.getFirstChild(); 
      if (child instanceof CharacterData) { 
     CharacterData cd = (CharacterData) child; 
     value=cd.getData(); 
      } 
      // adding each child node to HashMap key => value 
      map.put(KEY_ID,value); 


      // adding HashList to ArrayList 
      menuItems.add(map); 
     } 
0

财产以后上的元素,你发现而褐变的文件(这里的位置元素):

String latitude = locationElement.getAttribute("latitude"); 

虽然你的解析器不是很清楚!