【问题标题】:Android XmlPullParser - how to parse this XML sample file?Android XmlPullParser - 如何解析这个 XML 示例文件?
【发布时间】:2013-02-17 17:13:24
【问题描述】:

我有一个简单的 XML 文件。

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

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

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 标签后我应该做什么?我尝试了do-while - 一切都错了。 编辑:似乎在这种情况下不能使用 XmlPullParser。它看不到具有不同属性的相同标签之间的区别。我将尝试使用 SAXParser 的 startElement(String uri, String localName, String qName, Attributes attributes)。

【问题讨论】:

标签: java android xmlpullparser


【解决方案1】:

使用布尔标志实现了这一点。当你找到你需要的元素 => 将标志设置为 true 并继续解析。当找到该元素的结束标记时 => 将标志设置为 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-26
    • 1970-01-01
    • 1970-01-01
    • 2020-05-21
    • 2013-04-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多