有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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=""


共 (2) 个答案

  1. # 1 楼答案

    不幸的是,我不认为有一个简单的设置来控制这一点。如果有,你可以在^{}中找到它

    好消息是,正如我在评论中所说的,属性的原始形式是保留的,可以通过attr获得,但您无法区分allowfullscreen本身和allowfullscreen=""之间的区别

    因此,您可以自己对文档进行序列化,而modulo无法区分这一差异。或者,由于Jsoup是开源的,您可以为此添加一个Document.OutputSettings设置(可能还可以在解析器中进行修改,让您区分上述两种情况),并更新html和相关方法中的逻辑以尊重该设置,理想情况下可以通过分叉the project,进行更改,对更改进行测试,并执行拉取请求。:-)这可能不是人们想要的答案,但操作系统的好处在于,您可以在这个过程中解决自己的问题并改进项目

  2. # 2 楼答案

    通过阅读^{}的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">
    

    (使用JSoup的1.10.2版本进行测试)