[英]How to prevent Jsoup from erasing angle-brackets inside text when parsing
我正在尝试仅解析html文件的文本,该文件包含尖括号作为文本的一部分。
例如,html文件将如下所示:
<html>
<head></head>
<body>
<div>
<p>1. <someUnicodeString></p>
<p>2. <foo 2012.12.26.></p>
<p>3. <123 2012.12.26.></p>
<p>4. <@ 2012.12.26.></p>
<p>5. foobarbar</p>
</div>
</body>
</html>
我希望解析的文本文件的结果如下所示:
1. <someUnicodeString>
2. <foo 2012.12.26.>
3. <123 2012.12.26.>
4. <@ 2012.12.26.>
5. foobarbar
我正在使用Jsoup的parse函数来实现此目标,如下所示,
Document doc = null;
try {
doc = Jsoup.parse(new File(path), "UTF-8");
doc.outputSettings(new Document.OutputSettings().prettyPrint(false));
doc.outputSettings().escapeMode(EscapeMode.xhtml);
//set line breaks in readable format
doc.select("br").append("\\n");
doc.select("p").prepend("\\n\\n");
String bodyText = doc.body().html().replaceAll("\\\\n", "\n");
bodyText = Jsoup.clean(bodyText, "", Whitelist.none(), new Document.OutputSettings().prettyPrint(false));
File f = new File(textFileName+".txt");
f.getParentFile().mkdirs();
PrintWriter writer = new PrintWriter(f, "UTF-8");
writer.print(Parser.unescapeEntities(bodyText, false));
writer.close();
} catch(IOException e) {
//Do something
e.printStackTrace();
}
但是,一旦Jsoup经历了解析过程,它将为每个尖括号添加标签,后跟字符。
<p>1. <someUnicodeString></someUnicodeString></p>
<p>2. <foo 2012.12.26.></foo></p>
<p>3. <123 2012.12.26.></p>
<p>4. <@ 2012.12.26.></p>
<p>5. foobarbar</p>
最终产生结果
1.
2.
3. <123 2012.12.26.>
4. <@ 2012.12.26.>
5. asdasd
解析时如何防止Jsoup擦除文本内部的尖括号?
还是有办法让Jsoup识别某些尖括号不是html元素? (也许使用正则表达式?)
我是Jsoup的新手,非常感谢任何帮助。 谢谢。
感谢Davide Pastore的评论,以及“ HTML中的右括号 ”问题
我可以使用以下代码解决问题。
doc = Jsoup.parse(new File(path), "UTF-8");
//replace all left-angle tags inside <p> element to "<"
Elements pTags = doc.select("p");
for (Element tag : pTags) {
//change the boundary of the regex to whatever suits you
if (tag.html().matches("(.*)<[a-z](.*)")) {
String innerHTML = tag.html().replaceAll("<(?=[a-z])", "<");
tag.html(innerHTML);
}
}
如果你经过转换的过程“<”,在文本<
你开始解析之前,你将能够在得到正确的输出。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.