我有一些HTML文件需要解析和清理,它们偶尔会包含特殊字符,比如 <、>、"等未被正确转义的内容。
我尝试运行这些文件通过 jTidy,但最好的结果只是省略看作是格式不正确的内容。是否有其他库可以转义格式不正确的片段而不是省略它们?如果没有,您有什么修改最简单的库的建议吗?
澄清:
示例输入:<p> blah blah <M+1> blah </p>
期望输出:<p> blah blah <M+1> blah </p>
<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;
}
好的,我猜测是这个问题。使用以下代码,它会有所帮助。
javax.swing.text.html.HTML
HtmlCleaner是用Java编写的开源HTML解析器。Web上的HTML通常是肮脏、不规范且不适合进一步处理的。对于这些文档的任何严肃使用,需要先清理混乱并为标签、属性和普通文本带来顺序。对于给定的HTML文档,HtmlCleaner重新排序各个元素并生成格式良好的XML。默认情况下,它遵循大多数Web浏览器用于创建文档对象模型的类似规则。但是,用户可以提供自定义标签和标签过滤和平衡的规则集。