gpt4 book ai didi

java - 如何使用jsoup解析xhtml而不改变Html或解析Html实体

转载 作者:行者123 更新时间:2023-11-30 07:11:32 25 4
gpt4 key购买 nike

我正在使用 jsoup 解析器来操作 xhtml 文件。我的文件包含以下标签作为 I/P

<param name="video_title" value="&lt;p&gt;Renewable Energy&lt;/p&gt;" />
我使用对象 html 将此标记传递给 jsoup 解析器,如下所示

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="&lt;p&gt;Renewable Energy&lt;/p&gt;" />

任何人都可以建议我如何防止 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&lt;br&gt;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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com