2012-01-17 74 views
4

我正在啓動一個Android應用程序,它將解析來自Web的XML。我創建了一些Android應用程序,但他們從未涉及解析XML,我想知道是否有人有關於最佳方式的任何提示?從網站解析XML到Android設備

回答

9

下面是一個例子:

 try { 
      URL url = new URL(/*your xml url*/); 
      URLConnection conn = url.openConnection(); 

      DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
      DocumentBuilder builder = factory.newDocumentBuilder(); 
      Document doc = builder.parse(conn.getInputStream()); 

      NodeList nodes = doc.getElementsByTagName(/*tag from xml file*/); 
      for (int i = 0; i < nodes.getLength(); i++) { 
       Element element = (Element) nodes.item(i); 
       NodeList title = element.getElementsByTagName(/*item within the tag*/); 
       Element line = (Element) title.item(0); 
       phoneNumberList.add(line.getTextContent()); 
      } 
     } 
     catch (Exception e) { 
      e.printStackTrace(); 
     } 

在我的例子,我的XML文件看起來有點像:

<numbers> 
    <phone> 
     <string name = "phonenumber1">555-555-5555</string> 
    </phone> 
    <phone> 
     <string name = "phonenumber2">555-555-5555</string> 
    </phone> 
</numbers> 

,我會用 「手機」 和/*item within the tag*/與 「串」 替換/*tag from xml file*/

+0

這是導致我這個錯誤:http://stackoverflow.com/questions/13270372/ Android的操作系統networkonmainthreadexception-時,試圖對連接環比WiFi的使用 –

1

我總是使用w3c dom類。我有一個靜態幫助器方法,用於將xml數據解析爲字符串並返回給我一個Document對象。你得到的XML數據可以變化(網絡,文件等),但最終你加載它作爲一個字符串。

這樣的事情...

Document document = null; 
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder builder; 

    try 
    { 
     builder = factory.newDocumentBuilder(); 
     InputSource is = new InputSource(new StringReader(data)); 
     document = builder.parse(is); 
    } 
    catch (SAXException e) { } 
    catch (IOException e) { } 
    catch (ParserConfigurationException e) { } 
1

有可用的不同類型的解析機制,一個是SAX Here is SAX parsing example,二是DOM解析Here is DOM Parsing example.。從你的問題來看,你不清楚你想要什麼,但這可能是一個很好的起點。

+0

非常感謝各位,他給他們一個嘗試聽到,時間來擊中關於DOM和SAX解析然後:(書上 – carsey88

0

如果XML文件不是太大,我會使用DOM解析器,它不如SAX高效,因爲在這種情況下更容易。

我只做了一個android應用程序,涉及到XML解析。從SOAP Web服務接收到的XML。我使用了XmlPullParser。來自Xml.newPullParser()的實現存在一個錯誤,即對文檔承諾的nextText()調用並不總是前進到END_TAG。有一個解決這個問題的方法。

1

我知道有三種解析類型:DOM,SAX和XMLPullParsing。

在我的例子中,你需要XML元素的URL和父節點。

try { 
    URL url = new URL("http://www.something.com/something.xml"); 
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder db = dbf.newDocumentBuilder(); 
    Document doc = db.parse(new InputSource(url.openStream())); 
    doc.getDocumentElement().normalize(); 

    NodeList nodeList1 = doc.getElementsByTagName("parent node here"); 
    for (int i = 0; i < nodeList1.getLength(); i++) { 
     Node node = nodeList1.item(i); 
    } 
} catch(Exception e) { 

} 

也試試this