【问题标题】:Parsing XML from website to an Android device将 XML 从网站解析到 Android 设备
【发布时间】:2012-02-12 10:10:49
【问题描述】:

我正在启动一个从网络解析 XML 的 Android 应用程序。我已经创建了一些 Android 应用程序,但它们从未涉及解析 XML,我想知道是否有人对最好的方法有任何提示?

【问题讨论】:

    标签: java android xml parsing


    【解决方案1】:

    这是一个例子:

            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*/ 替换为“电话”,将/*item within the tag*/ 替换为“字符串”。

    【讨论】:

    【解决方案2】:

    我总是使用 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) { }
    

    【讨论】:

      【解决方案3】:

      解析机制有很多种,一种是SAXHere is SAX parsing example,第二种是DOM解析Here is DOM Parsing example.。从您的问题来看,您并不清楚您想要什么,但这些可能是很好的起点。

      【讨论】:

      • 非常感谢大家,我试听一下,是时候阅读有关 DOM 和 SAX 解析的书籍了 :( 哈哈
      【解决方案4】:

      我知道三种类型的解析: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

      【讨论】:

      • 请注意,这必须在后台线程上完成,否则会导致NetworkOnMainThreadException
      【解决方案5】:

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

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

      【讨论】:

        猜你喜欢
        • 2012-02-12
        • 1970-01-01
        • 1970-01-01
        • 2013-07-13
        • 1970-01-01
        • 1970-01-01
        • 2012-07-31
        • 1970-01-01
        • 2011-10-19
        相关资源
        最近更新 更多