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格式化元素,使结果与输入相同?
doc.outputSettings().charset("UTF-8");
Run Code Online (Sandbox Code Playgroud)
从字符串中仅解析html时,默认字符集为UTF-8,除非您另外使用File或InputStream作为解析输入来设置字符集。
因此,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)