我正在使用 jsoup 解析器来操作 xhtml 文件。 我的文件包含以下标签作为 I/P
<param name="video_title" value="<p>Renewable Energy</p>" />
org.jsoup.nodes.Document blogContentDocument = Jsoup.parse(html, "", Parser.xmlParser());
org.jsoup.select.Elements all_elements = blogContentDocument.select("*");
返回 all_elements 后我的 o/p 会像
<param name="video_title" value="<p>Renewable Energy</p>" />
预期输出:
<param name="video_title" value="<p>Renewable Energy</p>" />
任何人都可以建议我如何防止 jsoup 解析器更改 html 编码。
最佳答案
根据 jsoup 版本,这将起作用:
Document document = ...;
document.outputSettings().charset(Charset.forName("ASCII")); //$NON-NLS-1$
System.out.println(document.body().html());
解决方案可能是将 Jsoup 版本降级到 1.8.x 以下。转义行为从 1.7.x 更改为 1.8.x。
这里是一个例子:
- 1.7.3
<a href="#" title="Test<br>Test">Test<br />Test</a>
- 1.8.1
<a href="#" title="Test<br>Test">Test<br>Test</a>
此处有关于此主题的更多信息:
jsoup: differnt result after updating from 1.7.3 to 1.8.1, how to avoid this?
另一个解决方案可能是 apache commons StringEscapeUtils 。
逃离value
解析并将转义值放回元素属性后。
org.jsoup.select.Elements all_elements = blogContentDocument.select("*");
for (Element element : all_elements) {
String escaped = StringEscapeUtils.escapeHtml(element.attr("value"));
element.attr("value", escaped);
System.out.println(element);
}
// check if the content is changed in the document
System.out.println(blogContentDocument.html());
关于java - 如何使用jsoup解析xhtml而不改变Html或解析Html实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39166282/