SAX Parser忽略父元素?相同的命名元素作为结果分组

时间:2014-06-27 09:52:14

标签: java android sax saxparser

我不是,如果这只是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也无济于事。

我非常感谢你的帮助,谢谢你。

1 个答案:

答案 0 :(得分:0)

SAX不关注层次结构,但您可以在代码中对其进行补偿。

startElementcharactersendElement方法会按照它们出现的顺序在每个开始标记,字符内容和结束标记上进行相应调用,因此您要做的就是识别<Selection>中的startElement标记,并在您的处理程序中设置一个标记,以便记住忽略所有<name>标记,直到您在点击</Selection>标记时取消设置标记并识别它在你的endElement方法中。

如果您发布了更多ContentHandler代码,我可能会建议您进行具体更改。