繁体   English   中英

SAX解析器忽略父元素? 结果将相同命名的元素分组

[英]SAX Parser ignoring parent elements? Same named elements grouped as a result

如果这只是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>

如您所见,有一个名为“名称”的元素在包含不同数据的不同父项下显示两次。 我试图在ArrayList中收集“问题一”和“问题二”,其中我有一个setName getName的获取器和设置器。 如标题所示,我的结果意味着即使答案也被收集到该类型的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);
    }

显然,我只是在寻找名称,但是当我尝试将其用于“组”时,如果状态里面没有任何运气,请再说一遍。 它本质上是在忽略父母,群体和选择,而只是收集所有叫做名字的东西。 使用localName也无济于事。

在此先感谢您的帮助。

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

在每个开始标记,字符内容和结束标记上,按它们出现的顺序分别调用startElementcharactersendElement方法,因此您要做的是识别startElement<Selection>标记并在处理程序中设置一个标志记住要忽略发生的任何<name>标记,直到您取消设置</Selection>标记并在endElement方法中识别出该标记为止。

如果您发布更多的ContentHandler代码,我可能会建议进行特定的更改。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM