7

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

4

7 回答 7

4

我喜欢公共消化器。它允许您针对特定标签指定规则。该规则仅在遇到标记时执行。

Digester 建立在 sax 之上,因此具有所有 sax 功能以及选择性解析特定标签所需的特异性。它还使用一个堆栈,当遇到相应的标签时,它会与新元素一起被推送,并在元素结束时弹出。

我用它来解析我的所有配置文件。

在http://commons.apache.org/digester/查看消化器

于 2010-08-05T15:46:05.233 回答
2

是的,您可以这样做,只需忽略您不感兴趣的标签。但请注意,必须为此解析整个文档(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.
}
于 2010-08-05T04:58:11.767 回答
1

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

于 2010-08-05T04:42:14.327 回答
1

您可以尝试使用 XPath,它将在后台使用 SAX 来解析您的 xml。这里的缺点是每次调用 Xpath 评估方法时都会解析 XML。

于 2010-08-05T04:42:59.133 回答
1

如果你想读取特定的标签,那么 DOM 解析器比 SAX 解析器快得多。如果你想解析大型 XML 文件,SAX 解析器很有用。

于 2010-08-05T04:49:23.987 回答
1

您可以尝试结合使用TagSoup来创建可解析的 XML 文档和 XPath 来获取有趣的部分。

于 2010-08-05T08:06:17.807 回答
1

有关使用 SAX 跳过/忽略标签的策略,请参阅我对类似问题的回答:

用萨克斯跳过节点

它涉及在 XMLReader 上切换 ContentHandler。当您阅读要跳过的 XML 文档的移植时,您只需换入对事件不执行任何操作的 ContentHandler。当到达要忽略的部分的末尾时,它会将控制权传递回您用来处理 XML 内容的内容处理程序。

于 2010-08-05T15:06:37.230 回答