我们说我有这个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>
元素,使结果与输入相同?
答案 0 :(得分:5)
doc.outputSettings().charset("UTF-8");
从字符串解析html时,默认字符集为UTF-8,除非您使用File
或InputStream
作为解析输入设置字符集。
因此,OutputSettings
上的字符集默认与输入相同,在您的情况下为UTF-8。如果您希望它与输入不同,您只需要设置它。
Document.OutputSettings.charset()
获取文档的当前输出字符集,用于控制在生成HTML(通过html()方法)时转义哪些字符,以及哪些字符保持不变。
在可能的情况下(从URL或文件解析时),文档的输出字符集会自动设置为输入字符集。否则,它默认为UTF-8。
doc.outputSettings().prettyPrint(true);
您不需要启用漂亮的打印,默认情况下它已启用。
Document.OutputSettings.prettyPrint()
获取是否启用了漂亮打印。默认为true。如果禁用,则 HTML输出方法不会重新格式化输出,输出也会 通常看起来像输入。
doc.outputSettings().outline(true);
这是关键标签。如果未设置此选项,则仅显示块标记(option
为not 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>