Android XmlPullParser - 如何解析此XML示例文件?

时间:2013-03-03 16:09:12

标签: java android xmlpullparser

我有简单的XML文件。

<Parent id=1>
<Child>1</Child>
<Child>2</Child>
</Parent>
<Parent id=2>
<Child>3</Child>
<Child>4</Child>
</Parent>

如何获取Parent id = 2的Child标签的值?这是我的代码。

XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
XmlPullParser xpp = factory.newPullParser();
xpp.setInput(new StringReader(readFileAsString(xmlFilename)));

int event;
while ((event = xpp.next()) != XmlPullParser.END_DOCUMENT)
{
//found <Parent id=2> 
    if (event == XmlPullParser.START_TAG && xpp.getName().equalsIgnoreCase("Parent")
            && Integer.parseInt(xpp.getAttributeValue(null, "id")) == 2)
    {

        //TODO - what's next?

    }
}

TODO标签后我该怎么办?我试着做 - 一切都错了。 编辑:似乎在这种情况下不能使用XmlPullParser。它看不到具有不同属性的相等标签之间的区别。我将尝试使用SAXParser的startElement(String uri,String localName,String qName,Attributes attributes)。

1 个答案:

答案 0 :(得分:2)

使用布尔标志实现此目的。当你找到你需要的元素=&gt;将flag设置为true并继续解析。当找到该元素的结束标记=&gt;将flag设置为false。

if(flag)
{
    if (event == XmlPullParser.START_TAG && xpp.getName().equalsIgnoreCase("Child"))
      System.out.println(xpp.getText());
}
}
}
if (event == XmlPullParser.END_TAG && xpp.getName().equalsIgnoreCase("Level"))
{
    flag = false;
}

输出: 3 4