java在使用Jsoup解析时保持HTML布尔属性的原始形式
使用Jsoup解析以下HTML时:
String html = "<iframe allowfullscreen></iframe>";
Document doc = Jsoup.parseBodyFragment(html);
System.out.println(doc.body().html());
我得到以下输出:
<iframe allowfullscreen=""></iframe>
即使它必须具有相同的含义(source),是否有任何方法可以告诉Jsoup保持布尔属性的原始形式(即输入中的属性,allowfullscreen
而不是示例中的allowfullscreen=""
)
# 1 楼答案
不幸的是,我不认为有一个简单的设置来控制这一点。如果有,你可以在^{} 中找到它
好消息是,正如我在评论中所说的,属性的原始形式是保留的,可以通过
attr
获得,但您无法区分allowfullscreen
本身和allowfullscreen=""
之间的区别因此,您可以自己对文档进行序列化,而modulo无法区分这一差异。或者,由于Jsoup是开源的,您可以为此添加一个
Document.OutputSettings
设置(可能还可以在解析器中进行修改,让您区分上述两种情况),并更新html
和相关方法中的逻辑以尊重该设置,理想情况下可以通过分叉the project,进行更改,对更改进行测试,并执行拉取请求。:-)这可能不是人们想要的答案,但操作系统的好处在于,您可以在这个过程中解决自己的问题并改进项目# 2 楼答案
通过阅读^{} 的javadoc,我认为
Document.OutputSettings.Syntax.xml
是您所需要的:印刷品:
默认值(我认为是
Document.OutputSettings.Syntax.html
)是:如问题What does it mean in HTML 5 when an attribute is a boolean attribute?中所述,使用HTML布尔属性,这三种形式在语义上是相同的:
(使用JSoup的
1.10.2
版本进行测试)