在Android中使用DOM解析器

时间:2011-02-28 10:08:46

标签: android xml-parsing

我正在使用DOM解析器从XML文件中检索信息,如下所示:

<data>
    <metData>
        <wantedInformation>
    </metData>
    <metData>
        <Information>
    </metData>
    <metData>
        <Information>
    </metData>
<data>

问题是因为我不知道如何只解析<metData>的第一部分。我不需要第二部分和第三部分,但解析器无论如何都会显示它们。

xml文件来自天气预报网站: http://www.meteo.si/uploads/probase/www/fproduct/text/sl/fcast_SLOVENIA_MIDDLE_latest.xml
我只需要以下一行:<nn_shortText>oblačno</nn_shortText>

2 个答案:

答案 0 :(得分:2)

请注意您的XML文件是否格式正确,

你必须注意我在下面展示的三种方法,它们是

    1. getElementsByTagName - Mention the tag which you want to parse
    2.getChildNodes - retervies the child node 
    3.getNodeValue()- with the help of this method you can access the
 value of particular tag

步骤1:创建一个方法来解析_Information_Value,以便解析信息标记的数据

String[] infoId=null;

public  void  parse_Information_Value() throws UnknownHostException{


        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

        try {

            DocumentBuilder builder = factory.newDocumentBuilder();
            Document dom = builder.parse(this.getInputStream());
            org.w3c.dom.Element root = dom.getDocumentElement();
            NodeList items = root.getElementsByTagName("metData");
            int a=items.getLength();
            int k=0;

            for (int i = 0; i < items.getLength(); i++) {
                Message_category message = new Message_category();
                Node item = items.item(i);
                NodeList properties = item.getChildNodes();
                for (int j = 0; j < properties.getLength(); j++) {
                    Node property = properties.item(j);
                    String name = property.getNodeName();
                    if (name.equalsIgnoreCase("wantedInformation")) {
                        message.setId(property.getFirstChild()
                                .getNodeValue());
                        infoId[k]=property.getFirstChild().getNodeValue();
                        k++;
                    }
                }

            }
        } catch (Exception e) {         }

    }

答案 1 :(得分:0)

根据文档的大小,您可能还希望使用面向流的解析器,如SAXStax,它不会将整个文档拉入内存,因此需要的内存少于DOM。

好的是SAX已内置于Android中,因此您可以立即使用它。 有关使用示例,请参阅this link