嵌套的XML解析DOM解析

问题描述:

My xml is as follows...In this how can I get NAME attribute from status tag using DOM xml 
parsing... 

<tickets type="array"> 
    <ticket> 
      <ticket-id type="integer">6</ticket-id> 
      <status> 
       <id type="integer">1706729</id> 
       <name>Completed</name> 
       <colour>black</colour> 

      </status> 
    </ticket> 

    <ticket> 
      <ticket-id type="integer">5</ticket-id> 
      <status> 
       <id type="integer">1706929</id> 
       <name>New</name> 
       <colour>White</colour> 

      </status> 
    </ticket> 
</tickets> 
+0

http://www.androidhive.info/2011/11/android-xml-parsing-tutorial/ –

+0

Thanx for replay..but看看我的xml它是嵌套..和教程你建议我包含简单的XML。 –

+0

一次使用getElementbyTag(“ticket”)&做一个循环,然后再次使用内部循环getElementbyTag(“状态”)并获取所有你想要的值 –

这样,你应该能够让你在找什么

String xml = "<tickets type=\"array\"><ticket><ticket-id type=\"integer\">6</ticket-id><status><id type=\"integer\">1706729</id><name>Completed</name><colour>black</colour></status></ticket><ticket><ticket-id type=\"integer\">5</ticket-id><status><id type=\"integer\">1706929</id><name>New</name><colour>White</colour></status></ticket></tickets>"; 
      Log.e("xml parsing ", xml); 
      try { 
       DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance(); 
       domFactory.setNamespaceAware(true); 
       domFactory.setIgnoringComments(true); 
       domFactory.setIgnoringElementContentWhitespace(true); 
       domFactory.setCoalescing(true); 
       DocumentBuilder domBuilder = null; 
       Document document = null; 

       try { 
        domBuilder = domFactory.newDocumentBuilder(); 
       } 
       catch (ParserConfigurationException parserConfigurationException) { 
        Logger.log(Logger.LEVEL_ERROR, FrameworkHelper.class.getName(), "getDocumentRoot", "ParserConfigurationException caught while creating DocumentBuilder object, " + parserConfigurationException.getMessage()); 
       } 

       document = domBuilder.parse(new ByteArrayInputStream(xml.getBytes()));//try catch 
       NodeList ticketList = document.getElementsByTagName("ticket"); 
       for (int i = 0; i < ticketList.getLength(); i++) { 
        Element ticketNode = (Element) ticketList.item(i); 
        String tickets = ticketNode.getNodeValue(); 
        NodeList statusList = ticketNode.getElementsByTagName("status"); 
        for (int j = 0; j < statusList.getLength(); j++) { 
        Element statusNode = (Element) statusList.item(j); 
        String statuses = statusNode.getNodeValue(); 
        NodeList nameList = statusNode.getElementsByTagName("name"); 
        for (int k = 0; k < nameList.getLength(); k++) { 
         Element nameNode = (Element) nameList.item(k); 
         String names = nameNode.getChildNodes().item(0).getNodeValue(); 
         Toast.makeText(this, "name: " + names, 
          Toast.LENGTH_SHORT).show(); 
        } 
        } 
       } 
      } catch (SAXException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 

但是,如果层次不是重要的是要保持和你只是想单独处理的名字你可以直接调用getElementsByTagName(“name”)

+0

嘿朋友其不工作.. –

+0

kettu,我已经编辑了我的代码上面,请检查并确认! –

+0

非常感谢你的兄弟..现在它工作正常.. –