JSoup - 格式化<option>元素

时间:2016-08-09 16:19:12

标签: java jsoup html-parsing

我们说我有这个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>

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

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

结果是:

<html>
    <head> 
    </head> 
    <body> 
        <form method="post"> 
            <select name="books"> <option value="111">111</option> <option value="222">222</option> </select> 
        </form>  
    </body>
</html>

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

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

1 个答案:

答案 0 :(得分:5)

doc.outputSettings().charset("UTF-8");

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

因此,OutputSettings上的字符集默认与输入相同,在您的情况下为UTF-8。如果您希望它与输入不同,您只需要设置它。

Document.OutputSettings.charset()

  

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

     

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

doc.outputSettings().prettyPrint(true);

您不需要启用漂亮的打印,默认情况下它已启用。

Document.OutputSettings.prettyPrint()

  

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

doc.outputSettings().outline(true);

这是关键标签。如果未设置此选项,则仅显示块标记(optionnot a block tag)。启用后,所有标记都被视为块元素。

Document.OutputSettings.outline()

  

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

所以你最后的代码块应该是这样的:

Document doc = Jsoup.parse(html);

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

String result = doc.outerHtml();

<强>输出

<html>
    <head> 
    </head> 
    <body> 
        <form method="post"> 
            <select name="books"> 
                <option value="111">111</option> 
                <option value="222">222</option> 
            </select> 
        </form>  
    </body>
</html>