使用Jsoup进行语法分析时,保持HTML布尔属性的原始形式
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用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=""
)?
不幸的是,我不认为有一个简单的设置来控制它。如果有,你期望在Document.OutputSettings
找到它。
正如我在评论中所说的那样,好消息是该属性的原始形式通过attr
保留并可用,除了你不能区分allowfullscreen
和allowfullscreen=""
之间的区别。
所以你可以自己序列化文档,模数不能分辨出这一点。或者,由于Jsoup是开源的,您可以为此添加一个Document.OutputSettings
设置(并且可能在解析器中进行修改,以便您区分上述两种情况)并更新html
和相关方法中的逻辑以尊重设置,最好是通过分叉the project,进行更改,对变更进行测试,以及执行拉取请求。 :-)不太可能是人们喜欢的答案,但关于操作系统的好处是你可以抓住你自己的痒并在此过程中改进项目。
通过阅读Document.OutputSettings
的javadoc,我认为Document.OutputSettings.Syntax.xml
是你需要的:
Document doc = Jsoup.parseBodyFragment("<ol reversed><li>one</li></ol>");
doc.outputSettings().syntax(Syntax.xml);
System.out.println(doc.body().html());
打印:
<ol reversed="">
<li>one</li>
</ol>
默认(我认为是Document.OutputSettings.Syntax.html
)将是:
<ol reversed>
<li>one</li>
</ol>
正如本问题What does it mean in HTML 5 when an attribute is a boolean attribute?中提到的HTML布尔属性,语义上这三种形式是相同的:
<ol reversed>
<ol reversed="">
<ol reversed="reversed">
(测试版JSaz的1.10.2
)
以上是关于使用Jsoup进行语法分析时,保持HTML布尔属性的原始形式的主要内容,如果未能解决你的问题,请参考以下文章
用jsoup解析HTML时报错;java.lang.noclassdeffounderror:org/jsoup/Jsoup