[英]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.