簡體   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