我正在使用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>" />
预期o / p:
<param name="video_title" value="<p>Renewable Energy</p>" />
任何人都可以建议我如何防止jsoup解析器更改html编码。
答案 0 :(得分:1)
根据jsoup版本,这将起作用:
Document document = ...;
document.outputSettings().charset(Charset.forName("ASCII")); //$NON-NLS-1$
System.out.println(document.body().html());
解决方案可能是降级到低于1.8.x的Jsoup版本。转义行为从1.7.x更改为1.8.x。
这是一个例子:
<a href="#" title="Test<br>Test">Test<br />Test</a>
<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公共 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());