繁体   English   中英

使用Jsoup解析时,将HTML布尔属性保留为其原始形式

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM