[英]Keeping HTML boolean attributes in their original form when parsing with Jsoup
使用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
而不是allowfullscreen=""
)?
不幸的是,我认为没有简单的设置可以控制它。 如果有的话,您希望可以在Document.OutputSettings
找到它。
好消息,我在评论说,就是属性的原始形式被保留,并通过提供attr
,不同之处在于,你不能告诉之间的区别allowfullscreen
自身和allowfullscreen=""
。
因此,您可以自己序列化文档,而不能以模数的方式来区别一个区别。 或者,由于Jsoup是开源的,因此您可以为此添加一个Document.OutputSettings
设置(可能还可以在解析器中进行修改,以告知上述两种情况之间的区别),并更新html
和相关方法中的逻辑以供参考设置,最好是通过分叉项目 ,进行更改,对更改进行测试并进行拉取请求。 :-)可能不是一个人想要的答案,但是关于OS的伟大之处在于,您可以自己抓痒,并在此过程中改进项目。
通过阅读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>
如本问题所述, 当属性是布尔属性时,在HTML 5中是什么意思? 具有HTML布尔属性,在语义上这三种形式是相同的:
<ol reversed>
<ol reversed="">
<ol reversed="reversed">
(使用JSoup 1.10.2
版进行了测试)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.