我不是,如果这只是SAX Parser的工作方式,或者我错过了什么。
这是我从服务器上下载的那种XML:
<Data>
<Item id="1">
<Group>
<Name>Question One</Name>
<type>true</type>
<Selection>
<Name>Answer 1</Name>
</Selection>
</Group>
</Item>
<Item id="2">
<Group>
<Name>Question Two</Name>
<type>true</type>
<Selection>
<Name>Answer 2</Name>
</Selection>
</Group>
</Item>
</Data>
正如您所看到的,有一个名为“Name”的元素在不同的父级下出现两次,包含不同的数据。我试图在ArrayList中收集“问题一”和“问题二”,其中我有一个getName和setName setName getName。正如标题所示,我的结果意味着甚至将Answers收集到该类型的ArrayList中。
有没有办法只拉出引用问题一和问题二的“姓名”?以下是我现在在结尾元素中的方法:
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
super.endElement(uri, localName, qName);
if (qName.equalsIgnoreCase("name")) {
dataItem.setName(currentValue);
}
显然我只是在寻找名字,但是当我为“团体”尝试它时,然后把第二个if状态放在里面,我也没有运气。它基本上忽略了父母,群体和选择,只是收集了所谓的名字。使用localName
也无济于事。
我非常感谢你的帮助,谢谢你。
答案 0 :(得分:0)
SAX不关注层次结构,但您可以在代码中对其进行补偿。
startElement
,characters
和endElement
方法会按照它们出现的顺序在每个开始标记,字符内容和结束标记上进行相应调用,因此您要做的就是识别<Selection>
中的startElement
标记,并在您的处理程序中设置一个标记,以便记住忽略所有<name>
标记,直到您在点击</Selection>
标记时取消设置标记并识别它在你的endElement
方法中。
如果您发布了更多ContentHandler
代码,我可能会建议您进行具体更改。