使用Java解析HTML文件

3
如何使用Java从HTML文件中删除注释和注释内容,其中注释的格式如下:
<!--

需要任何关于这方面的想法或帮助。


这个问题应该命名为“如何使用Java从HTML中删除注释”。 - Sergio del Amo
3个回答

5

看看JTidy,这是HTML Tidy的Java移植版。您可以重写PPrint对象的打印方法以忽略注释标记。


4
如果您没有有效的xhtml,如一条评论提醒我的那样,您应该首先应用jtidy来整理html并使其成为有效的xhtml。
请参见this,了解jtidy的示例代码。
然后我会将html转换为DOM实例。
像这样:
final DocumentBuilderFactory newFactory = DocumentBuilderFactory.newInstance();
final DocumentBuilder documentBuilder = newFactory.newDocumentBuilder();
Document document = documentBuilder.parse( new InputSource( new StringReader( string ) ) );

然后我会浏览整个文档树,并根据需要修改节点。

大多数HTML仍然不是XHTML,因此JTidy可能应该是首选而不是事后的想法。 - Joachim Sauer

0
尝试一个简单的正则表达式,例如
String commentless = pageString.replaceAll("<!--[\w\W]*?-->", "");

编辑:解释正则表达式:

  • <!-- 匹配字面意义的注释开始
  • [\w\W] 匹配注释内的每个字符(包括换行符)
  • *? 匹配多个“任意字符”,但匹配最少的字符(非贪婪模式)
  • --> 关闭注释

一个简单的正则表达式应该可以搞定 - 但是这个却不行...注释有时候不会在同一行打开和关闭。我刚在谷歌上找到了这个链接,看起来更好: http://ostermiller.org/findhtmlcomment.html - Simon Groenewolt
如果您尝试这样做,它会起作用。 \w\W 捕获所有内容,包括换行符,而不像 '.'。 - cobbal
不太确定为什么这个被踩了。无论这个特定的正则表达式是否有效,正则表达式确实是解决这个问题的正确方式。 - user29053
不,它不是。这也会从以下内容中删除“注释”:<input type="text" value="<!-- Hello world -->">,这是不正确的。<!-- 并不总是开始注释。 - Peter Štibraný
好观点。在字符串中使用<是否合法?我相当确定>会导致大多数浏览器出错。 - cobbal
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接