JSoup-格式化<option>元素

ele*_*ype 4 java html-parsing jsoup

假设我有这个HTML:

<html>
    <head>
    </head>
    <body>
        <form method="post">
            <select name="books"> 
                <option value="111">111</option>
                <option value="222">222</option>
            </select>
        </form>
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

我将其加载到Jsoup中并返回结果:

Document doc = Jsoup.parse(html);
doc.outputSettings().indentAmount(4);
doc.outputSettings().charset("UTF-8");
doc.outputSettings().prettyPrint(true);
String result = doc.outerHtml();
Run Code Online (Sandbox Code Playgroud)

结果是:

<html>
    <head> 
    </head> 
    <body> 
        <form method="post"> 
            <select name="books"> <option value="111">111</option> <option value="222">222</option> </select> 
        </form>  
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

<option>元素都是在同一行!

<option>在此示例中,如何让Jsoup格式化元素,使结果与输入相同?

Zac*_*ack 6

doc.outputSettings().charset("UTF-8");
Run Code Online (Sandbox Code Playgroud)

从字符串中仅解析html时,默认字符集为UTF-8,除非您另外使用FileInputStream作为解析输入来设置字符集。

因此,OutputSettings在您的情况下,字符集on 将默认与输入相同,即UTF-8。仅当您希望它与输入不同时才需要设置它。

Document.OutputSettings.charset()

获取文档的当前输出字符集,该字符集用于控制在生成HTML时哪些字符被转义(通过html()方法),以及哪些字符保持完整。

在可能的情况下(从URL或文件进行解析时),文档的输出字符集将自动设置为输入字符集。否则,它默认为UTF-8。


doc.outputSettings().prettyPrint(true);
Run Code Online (Sandbox Code Playgroud)

您无需启用漂亮的打印功能,默认情况下该功能处于启用状态。

Document.OutputSettings.prettyPrint()

获取是否启用漂亮打印。默认为true。如果禁用,则HTML输出方法将不会重新格式化输出,并且输出通常看起来像输入。


doc.outputSettings().outline(true);
Run Code Online (Sandbox Code Playgroud)

这是关键标签。当这种没有被设置,只有块标签被显示为这样的(option不是块标签)。启用后,所有标签均视为块元素。

Document.OutputSettings.outline()

获取是否启用了大纲模式。默认为false。如果启用,HTML输出方法会将所有标签视为块。


因此,您的最终代码块应如下所示:

Document doc = Jsoup.parse(html);

doc.outputSettings().indentAmount(4).outline(true);

String result = doc.outerHtml();
Run Code Online (Sandbox Code Playgroud)

输出量

<html>
    <head> 
    </head> 
    <body> 
        <form method="post"> 
            <select name="books"> 
                <option value="111">111</option> 
                <option value="222">222</option> 
            </select> 
        </form>  
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)