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

标签 java html xhtml jsoup

我正在使用 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/

相关文章:

java - Java 构造函数可以返回已存在的相同类型的对象吗?

查询 : Get parent element then apply css selector to it

javascript - 一个 <a> 标签是否可以有 2 个连续的 onclick 操作?

javascript - 如何在新选项卡中打开新页面并重定向当前页面

html - 100% 宽度页眉和页脚

java - 使用java中的自签名证书连接到websocket

java - JPanel 之间的转换?

java - 在 Spring MVC 中将 ContextLoaderListener 添加到 web.xml

javascript - 如何设置丰富:calendar Date via JavaScript?

javascript - 使用 JavaScript 查找选定文本的开始和结束索引