繁体   English   中英

理想的Java库,用于清理html和转义格式错误的片段

[英]Ideal Java library for cleaning html, and escaping malformed fragments

我有一些需要解析和清理的HTML文件,它们偶尔会有包含<,>,“等特殊字符的内容,这些内容尚未被正确转义。

我已经尝试通过jTidy运行文件,但我能做的最好的事情就是省略它看作格式错误的html的内容。 是否有一个不同的库可以逃脱畸形的片段而不是省略它们? 如果没有,关于哪个库最容易修改的任何建议?

澄清:

样本输入:<p> blah blah <M + 1> blah </ p>

期望的输出:<p> blah blah&lt; M + 1&gt; 哇</ p>

您也可以尝试TagSoup TagSoup会发出常规的旧SAX事件,因此最终会得到一个结构良好的XML文档。

我对TagSoup运气很好,我总是惊讶于它处理构造不良的HTML文件的能力。

最后,我通过首先运行正则表达式和未修改的TagSoup秒来解决这个问题。

这是我的正则表达式代码,用于转义<M+1>等未知标记

private static String escapeUnknownTags(String input) {
    Scanner scan = new Scanner(input);

    StringBuilder builder = new StringBuilder();

    while (scan.hasNext()) {

        String s = scan.findWithinHorizon("[^<]*</?[^<>]*>?", 1000000);

        if (s == null) {
            builder.append(escape(scan.next(".*")));
        } else {

            processMatch(s, builder);
        }

    }

    return builder.toString();
}

private static void processMatch(String s, StringBuilder builder) {

    if (!isKnown(s)) {
        String escaped = escape(s);

        builder.append(escaped);
    }
    else {
        builder.append(s);
    }

}

private static String escape(String s) {
    s = s.replaceAll("<", "&lt;");
    s = s.replaceAll(">", "&gt;");
    return s;
}

private static boolean isKnown(String s) {
    Scanner scan = new Scanner(s);
    if (scan.findWithinHorizon("[^<]*</?([^<> ]*)[^<>]*>?", 10000) == null) {

        return false;
    }

    MatchResult mr = scan.match();

    try {

        String tag = mr.group(1).toLowerCase();

        if (HTML.getTag(tag) != null) {
            return true;
        }
    }
    catch (Exception e) {
        // Should never happen
        e.printStackTrace();
    }

    return false;
}

HTML清洁工

HtmlCleaner是用Java编写的开源HTML解析器。 在Web上找到的HTML通常很脏,格式不正确,不适合进一步处理。 对于任何严重消费此类文件,有必要首先清理混乱并将订单带到标签,属性和普通文本。 对于给定的HTML文档,HtmlCleaner重新排序单个元素并生成格式良好的XML。 默认情况下,它遵循大多数Web浏览器用于创建文档对象模型的类似规则。 但是,用户可以为标签过滤和平衡提供自定义标签和规则集。

好的,我怀疑是这个。 使用以下代码,它会有所帮助。

javax.swing.text.html.HTML

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM