如何忽略XML SAX PARSING中的类似标记

时间:2012-02-24 15:53:12

标签: java android saxparser

我有像这样的XML

<OuterTag>
       <Name>JAVA
      </Name>
<InnerTag>
     <Name> PHP
    </Name>
</InnerTag>

</OuterTag>

我只想要包含“Java”的值。但是当我解析时它也会带来“PHP”,因为本地名称是相同的。是否可以过滤多个LocalNames并选择我想要的?我怎么能这样做?

3 个答案:

答案 0 :(得分:1)

想法是保存你所处的状态,只需使用一个布尔值,如果找到'OuterTag'的开放标记,则将其设置为true,并在找到'InnerTag'的开放标记时将其设置为false

这样,当您找到'name'标签时,您就可以了。

另一种更灵活的方法是在找到标签名称时按下/弹出标签名称。这样,当您找到“名称”标记然后获得正确的值时,您可以检查谁是您的父标记。

答案 1 :(得分:0)

如果我理解正确,您需要Name下的OuterTag标记,而不是InnerTag下的 SAXReader saxReader = new SAXReader(); saxReader.addHandler("OuterTag/Name", new ElementHandler() { @Override public void onStart(ElementPath arg0) { // TODO Auto-generated method stub } @Override public void onEnd(ElementPath arg0) { // TODO Auto-generated method stub } }); File inputFile = new File(filename); saxReader.read(inputFile); 标记。所以,我就是这样做的dom4j

{{1}}

我希望这会有所帮助。

答案 2 :(得分:0)

Sax解析器通常具有可以编写代码的钩子,特别是StartElementEndElementcharacters

莫斯有正确的答案 -

StartElement :将元素名称推送到堆栈。

字符:如果元素名称为'name',并且堆栈上有“OuterTag”元素, 然后你找到了自己的价值。否则,请忽略它。

EndElement 将元素弹出堆栈。


请注意,sax解析器功能非常强大,但有时候会过度杀伤。非常快,适用于解析格式错误的xml或非常大的XML文件,在解析器遇到它们时对元素做出反应。

我会小心地建议'考虑'一个XPath解决方案,它可以为你解析,让你轻松引用任何元素。创建一个Xpath对象并使用类似'/OuterTag/Name[1]'的内容进行查询。如果您之前使用过jQuery,那么您将会在家中。

但是,如果您的XML格式错误或非常庞大和复杂,这可能会非常缓慢。你被警告过了。

只要知道XPath可用作可能的解决方案。 http://www.javabeat.net/tips/182-how-to-query-xml-using-xpath.html