将XML从网站解析为Android设备

时间:2012-01-17 15:42:50

标签: java android xml parsing

我正在启动一个Android应用程序,它将从Web解析XML。我已经创建了一些Android应用程序,但他们从未涉及解析XML,我想知道是否有人有关于最佳方式的任何提示?

5 个答案:

答案 0 :(得分: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>

我会将/*tag from xml file*/替换为“phone”,将/*item within the tag*/替换为“string”。

答案 1 :(得分: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) { }

答案 2 :(得分:1)

有不同类型的解析机制可用,一个是SAX Here is SAX parsing example,第二个是DOM解析Here is DOM Parsing example.。从你的问题来看,目前尚不清楚你想要什么,但这些可能是一个很好的起点。

答案 3 :(得分:1)

我知道有三种类型的解析:DOM,SAX和XMLPullParsing。

在我的示例中,您需要URL和XML元素的父节点。

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

答案 4 :(得分:0)

如果XML文件不是太大,我会使用DOM解析器,它不如SAX高效,因为在这种情况下它更容易。

我只创建了一个Android应用程序,它涉及XML解析。从SOAP Web服务接收的XML。我用过XmlPullParser。来自Xml.newPullParser()的实现有一个错误,即对文档的承诺,对nextText()的调用并不总是前进到END_TAG。有一个解决方法。