如何忽略XML SAX解析
类似的标签我有这样的XML一个如何忽略XML SAX解析
<OuterTag>
<Name>JAVA
</Name>
<InnerTag>
<Name> PHP
</Name>
</InnerTag>
</OuterTag>
我只是想它包含的“Java”这个值。但是,当我解析它也带来“PHP”,因为本地名称是相同的。是否可以过滤多个LocalNames并选择我想要的?我怎样才能做到这一点?
想法是保存你所在的状态,只需使用布尔值并将其设置为true,如果你找到'OuterTag'的开放标签并且在你找到'InnerTag的开放标签时将其设置为false ”。
当你发现你的“名称”标签,现在,你是这个样子。
另一种更灵活的方式是推动/当你发现他们流行的标记名称。通过这种方式,您可以在找到“名称”标签时检查谁是您的父标签,然后获取正确的值。
我是SAX解析的起始者,如果你给我一个合适的方法代码的例子,那么它会更有帮助,谢谢 – 2012-02-24 16:03:09
我已经实现了你的逻辑,它的工作原理:) – 2012-02-24 16:40:36
^^不错,它帮助:D – Moss 2012-02-24 18:33:08
如果我忽略correclty,您希望Name
标记在OuterTag
下,而不是InnerTag
下的标记。所以,这是我如何与dom4j做到这一点:
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);
我希望这有助于。
你是对的,但我是SAX PARSING在这里:) – 2012-02-24 16:16:00
我认为[SAXReader](http://dom4j.sourceforge.net/dom4j-1.6.1/apidocs/org/dom4j/io/SAXReader.html)做SAX解析。您可以指定您最喜欢的SAX解析器或“如果未明确指定解析器,则使用org.xml.sax.driver系统属性的标准SAX策略来确定XMLReader的实现类。如果org.xml.sax .driver系统属性未定义,则JAXP通过反射使用“ – MarcoS 2012-02-24 16:28:09
萨克斯语解析器通常有钩子,您可以在其中编写代码,特别是StartElement
,EndElement
和characters
。
莫斯有正确的答案 -
起始元素:按元素名称到堆栈。
characters如果元素名称是'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
如果您只需要从该XML中获取一些任意值,那么XPath会是您更好的选择? – machinery 2012-02-24 16:23:37