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

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

  • 未parsing的Aapt错误
  • 将多个项目置于RelativeLayout中,而不将它们放在容器中?
  • Android XML布局文件和名称空间
  • 有没有更简单/更好的方式来放置我的TextView边框/轮廓?
  • ScrollView会切掉顶部,并在底部留出空间
  • LinearLayout minHeight不能与weigth =“1”
  • Android XML:RuntimeException:无法parsing索引6处的属性
  • 用android:drawable =“@ color / transparent”属性select器
  • 我喜欢公共消化池。 它允许您指定针对特定标签的规则。 该规则只有在遇到标签时才会执行。

    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内容的内容处理程序。