【问题标题】:How do I use the java library "HTML Parser" to remove all <style> tags?如何使用 java 库“HTML Parser”删除所有 <style> 标签?
【发布时间】:2011-12-21 15:43:33
【问题描述】:

我需要对 html 文件执行多项操作,例如删除特定标签或删除属性。我决定使用 HTML Parser,一个 java 库: http://htmlparser.sourceforge.net/

首先,我要删除所有样式标签。通过这样做,我设法获得了一个包含所有样式标签的 NodeList:

Parser parser = new Parser (url);
NodeList list = parser.parse (null);            
NodeList styles = list.extractAllNodesThatMatch (new TagNameFilter ("STYLE"), true);

现在我不知道如何从整个节点列表中删除此样式属性。我必须获取整个列表吗?

之后,我希望能够删除标签内的所有属性或仅删除 alt 属性。有没有自动完成的方法?

【问题讨论】:

  • 如果你能保证你的 HTML 是 XML 有效的(如果需要通过 HTML Purifier 或类似的东西)你应该使用 XML 解析器,因为它们更强大(能够使用 XPath 将让你的许多任务变得微不足道)。
  • +1 表示写得很好的第一个问题。很少能够阅读和理解用户的第一个问题。干得好,祝 Stack Overflow 好运!

标签: java html parsing tags


【解决方案1】:

从文档中,Parser 返回包含所有 html 节点的树列表(将解析器视为 Node 的大树的根节点,该树的每个“级别”都是NodeList)。

您可以递归地遍历树,针对StyleTag 测试每个节点的类型,并在适用时将其从相应的NodeList 中删除。继续递归地下降到树中,直到访问它的所有节点。

NodeTreeWalker是你的朋友,可以帮助你进行递归树遍历。

jsoup 是另一个不错的选择,它具有更简单的界面(请参阅另一个question)。

【讨论】:

  • 我停止尝试使用 HTMLParser,我已经切换到更简单的 JSoup,你说得对。谢谢!
  • 很高兴为您提供帮助。如果您发现这是正确答案,请不要忘记将其标记为正确答案。 :-)
猜你喜欢
  • 2010-10-23
  • 1970-01-01
  • 2013-09-05
  • 1970-01-01
  • 2013-04-28
  • 1970-01-01
  • 2011-07-31
  • 2014-10-06
  • 1970-01-01
相关资源
最近更新 更多