我有一些需要解析和清理的HTML文件,并且它们偶尔会包含特殊字符的内容,例如&lt ;,>,“等等,这些内容尚未正确转义。
我已尝试通过jTidy运行文件,但我能做的最好的事情就是省略它看到的格式错误的HTML内容。是否有一个不同的库可以逃脱畸形的片段而不是省略它们?如果没有,关于哪个库最容易修改的任何建议?
澄清:
样本输入:< p> blah blah< M + 1> blah< / p>
期望的输出:< p> blah blah& lt; M + 1& gt; blah< / p>
答案 0 :(得分:1)
答案 1 :(得分:0)
最终我通过首先运行正则表达式和未修改的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;
}
答案 2 :(得分:0)
HtmlCleaner是用Java编写的开源HTML解析器。找到HTML 网络通常很脏,形成不良,不适合进一步使用 处理。对于任何严重消费此类文件,它是 必须首先清理混乱并将订单带到标签, 属性和普通文本。对于给定的HTML文档,HtmlCleaner 重新排序单个元素并生成格式良好的XML。默认情况下, 它遵循大多数Web浏览器使用的类似规则 创建文档对象模型。但是,用户可以提供自定义标签和 用于标记过滤和平衡的规则集。
答案 3 :(得分:0)
好的,我怀疑是这样的。使用以下代码,它会有所帮助。
javax.swing.text.html.HTML