我试图只解析包含尖括号作为文本一部分的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的新手,非常感谢任何形式的帮助。谢谢。
2条答案
按热度按时间iszxjhcz1#
感谢Davide Pastore的评论,以及“HTML中的右尖括号”问题
我可以用下面的代码解决这个问题。
字符串
如果在开始解析之前,先完成将文本中的“<”转换为
<
的过程,就可以得到正确的输出。njthzxwz2#
doc = Jsoup.parse(new File(path),“UTF-8”);
第一行是将html从
字符串
到
型
它应该像解析后,非html标签应该有没有任何修改。