2012-01-17 77 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