【问题标题】:Parsing an HTML file using Java使用 Java 解析 HTML 文件
【发布时间】:2009-03-17 11:12:55
【问题描述】:

如何使用 Java 从 html 文件中删除 cmets 和 cmets 的内容,其中 cmets 的编写方式如下:

<!--

在这方面需要任何想法或帮助。

【问题讨论】:

  • 这个问题应该命名为“How to remove cmets from HTML using Java”

标签: java


【解决方案1】:

看看JTidy,HTML Tidy 的 java 端口。您可以覆盖 PPrint 对象的打印方法以忽略注释标签。

【讨论】:

    【解决方案2】:

    如果你没有有效的xhtml,一个评论让我想起了,你应该首先申请jtidy来整理html并使其成为有效的xhtml。

    有关 jtidy 的示例代码,请参见 this

    然后我会将 html 转换为 DOM 实例。

    像这样:

    final DocumentBuilderFactory newFactory = DocumentBuilderFactory.newInstance();
    final DocumentBuilder documentBuilder = newFactory.newDocumentBuilder();
    Document document = documentBuilder.parse( new InputSource( new StringReader( string ) ) );
    

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

    【讨论】:

    • 大多数 HTML 仍然不是 XHTML,所以 JTidy 应该是首选,而不是事后才考虑。
    【解决方案3】:

    尝试一个简单的正则表达式

    String commentless = pageString.replaceAll("<!--[\w\W]*?-->", "");
    

    编辑:解释正则表达式:

    • &lt;!-- 匹配文字注释开始
    • [\w\W] 匹配注释中的每个字符(甚至是换行符)
    • *? 匹配多个“任意字符”,但匹配可能的最小数量(不贪心)
    • --&gt; 关闭评论

    【讨论】:

    • 一个简单的正则表达式应该能够完成这项工作 - 但这个不能...... cmets 并不总是在同一行打开和关闭。我刚刚在 google 上发现这个链接似乎更好:ostermiller.org/findhtmlcomment.html
    • 如果你试试这个,它会起作用。 \w\W 捕获所有内容,包括换行符,与 '.' 不同
    • 不完全确定为什么这被否决了。不管这个特定的 RegEx 是否有效,RegEx 都是可行的方法。
    • 不,不是。它也会从中删除“评论”:,这是不正确的。
    猜你喜欢
    • 2015-07-28
    • 2010-10-10
    • 2015-12-02
    • 2015-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-24
    相关资源
    最近更新 更多