使用SAXparsing器parsing大型XML文件(跳过一些行/标签)

我目前正在开发一个应用程序,使用SAX从互联网检索数据。 我之前使用它来分析简单的XML文件,如Google Weather API。 然而,我感兴趣的网站将parsing到一个新的水平。 页面很大,看起来很乱。 我只需要检索一些特定的行; 其余的对我没有用处。
是否有可能跳过那些无用的行/标签,还是我必须一步一步走?

Related of "使用SAXparsing器parsing大型XML文件(跳过一些行/标签)"

我喜欢公共消化池。 它允许您指定针对特定标签的规则。 该规则只有在遇到标签时才会执行。

Digester是build立在萨克斯之上的,因此具有所有的萨克斯特性以及select性parsing特定标签所需的特异性。 它还使用了一个堆栈,当遇到相应的标记时,这个堆栈被新的元素推送,当元素结束时被popup。

我用它来parsing所有的configuration文件。

http://commons.apache.org/digester/查看沼气池

是的,你可以做到这一点,只是忽略你不感兴趣的标签。但是请注意,整个文档将不得不为此parsing(DefaultHandler impl)

public startElement(String uri, String localName, String qName, Attributes attributes) { if(localName.equals("myInterestingTag") { // do your thing.... } } public void endElement(String uri, String localName, String qName) { if(localName.equals("myInterestingTag") { // do your thing.... } } public void characters(char[] ch, int start, int length) { // if parsing myinteresting tag... do some stuff. } 

是的,你可以跳过。 只需定义你想要的标签,它只会获取这些标签值。

您可以尝试使用将在场景后面使用SAX的XPath来parsing您的xml。 这里的缺点是XML将在每次调用Xpath评估方法时被parsing。

你要读取特定的标签,然后DOMparsing器比SAXparsing器快得多。如果你想parsing大的XML文件,那么SAXparsing器是有用的。

您可以尝试组合使用TagSoup来创build可parsing的XML文档和XPath以获取有趣的部分。

看到我的回答类似的问题,使用SAX跳过/忽略标记的策略:

用sax跳过节点

它涉及在XMLReader上切换ContentHandler。 当你阅读一个你想跳过的XML文档的移植时,你只需交换一个与事件无关的ContentHandler即可。 当被忽略的部分结束时,它将控制权交还给用于处理XML内容的内容处理程序。