Android XML Parsing - 在标签中包含标签的XML

时间:2014-07-07 14:47:37

标签: java android xml

我正在解析xml,但我无法解析其中的xml标记和另一个标记。 这是XML结构。

<Entry>
  <MediaID>434234242342</MediaID>
  <MediaName>Brazil</MediaName>
  <PhoneNo>
     <Ip>23232323232</Ip>
     <Ip>32323232323</Ip>
     <Ip>323232323232</Ip>
  </PhoneNo>
</Entry>

这是Java代码。我成功解析了MediaID和MediaName,但是我如何解析

中的标签
Document doc = parser.getDomElement(return_string); // getting DOM element
NodeList nl2 = doc.getElementsByTagName("Entry");

   for (int i = 0; i < nl2.getLength(); i++) {

        Element e = (Element) nl2.item(i); 
        media_name = parser.getValue(e,"MediaName");
        mediaID    = parser.getValue(e,"MediaID");
        phoneNo =  parser.getValue(e,"PhoneNo"); //it is not working
   }

2 个答案:

答案 0 :(得分:1)

我不知道你在使用什么解析器,我会推荐XMLPullParser:

XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
        XmlPullParser xpp = factory.newPullParser();





        xpp.setInput(reader);// the reader you are using to read the xml file 


        int eventType = xpp.getEventType();

        // Loop through pull events until we reach END_DOCUMENT
        while (eventType != XmlPullParser.END_DOCUMENT) {
            // Get the current tag
            String tagname = xpp.getName();

            // React to different event types appropriately
            switch (eventType) {
            case XmlPullParser.START_TAG:
                if (tagname.equalsIgnoreCase(THE_TAG_YOUR_LOOKING_FOR)) {
                    //anything you want to do at the start of the tag
                }
                break;

            case XmlPullParser.TEXT:

                //normally you would retrive here the text which is between the tags
                //with xpp.getText()
                break;

            case XmlPullParser.END_TAG:
                //generally a serie of if else depending on which tag you are on and 
                //what you want to do with the content
                break;

            default:
                break;
            }

答案 1 :(得分:1)

尝试递归。您可以按照您希望的方式格式化输出。

import java.io.IOException;
import java.io.StringReader;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;

public class DOMParser {
    public static void main(final String[] args) throws SAXException, IOException, ParserConfigurationException {
        String xml = "<Entry>"
                + "<MediaID>434234242342</MediaID>"
                + "<MediaName>Brazil</MediaName>"
                + "<PhoneNo>"
                    + "<Ip>23232323232</Ip>"
                    + "<Ip>32323232323</Ip>"
                    + "<Ip>323232323232</Ip>"
                + "</PhoneNo>"
            + "</Entry>";
        DOMParser parser = new DOMParser();
        final Document doc = parser.getDomElement(xml);
        parser.parse(doc.getDocumentElement());
    }

    public void parse(final Element e) {
        final NodeList children = e.getChildNodes();
        for (int i = 0; i < children.getLength(); i++) {
            final Node n = children.item(i);
            if(n.getNodeType() == Node.TEXT_NODE){
            System.out.println(n.getTextContent());
            } else if (n.getNodeType() == Node.ELEMENT_NODE) {
            System.out.print(n.getNodeName() + " : ");
            parse((Element) n);
            }
        }
    }

    public Document getDomElement(String xml){
        Document doc = null;
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        try {

            DocumentBuilder db = dbf.newDocumentBuilder();

            InputSource is = new InputSource();
            is.setCharacterStream(new StringReader(xml));
            doc = db.parse(is); 

            } catch (ParserConfigurationException e) {
            return null;
            } catch (SAXException e) {
            return null;
            } catch (IOException e) {
            return null;
            }

            return doc;
        }
}