[英]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秒來解決這個問題。
這是我的正則表達式代碼,用於轉義<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("<", "<");
s = s.replaceAll(">", ">");
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;
}
HtmlCleaner是用Java編寫的開源HTML解析器。 在Web上找到的HTML通常很臟,格式不正確,不適合進一步處理。 對於任何嚴重消費此類文件,有必要首先清理混亂並將訂單帶到標簽,屬性和普通文本。 對於給定的HTML文檔,HtmlCleaner重新排序單個元素並生成格式良好的XML。 默認情況下,它遵循大多數Web瀏覽器用於創建文檔對象模型的類似規則。 但是,用戶可以為標簽過濾和平衡提供自定義標簽和規則集。
好的,我懷疑是這個。 使用以下代碼,它會有所幫助。
javax.swing.text.html.HTML
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.