在Jsoup 1.15.3中,当解析或输出HTML时,pre 标签的内容可能会被自动格式化,从而插入额外的换行和空格,这通常是由于 Jsoup 自动美化和格式化 HTML 的行为造成的。
pre
要解决这个问题,可以使用以下几种方法:
OutputSettings
Jsoup 提供了 OutputSettings 来控制输出的格式化行为。可以通过设置 prettyPrint(false) 来禁用自动格式化。
prettyPrint(false)
java复制代码import org.jsoup.Jsoup; import org.jsoup.nodes.Document; public class JsoupPreTagExample { public static void main(String[] args) { String html = "<pre> Some preformatted\n text here. </pre>"; Document doc = Jsoup.parse(html); // 禁用 prettyPrint doc.outputSettings().prettyPrint(false); String result = doc.html(); System.out.println(result); } }
import org.jsoup.Jsoup; import org.jsoup.nodes.Document; public class JsoupPreTagExample { public static void main(String[] args) { String html = "<pre> Some preformatted\n text here. </pre>"; Document doc = Jsoup.parse(html); // 禁用 prettyPrint doc.outputSettings().prettyPrint(false); String result = doc.html(); System.out.println(result); } }
如果 pre 标签的内容不需要被 Jsoup 修改,可以使用 Jsoup.parseBodyFragment 或者避免直接操作 pre 的内容。
Jsoup.parseBodyFragment
java复制代码import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; public class JsoupPreTagExample { public static void main(String[] args) { String html = "<pre> Some preformatted\n text here. </pre>"; Document doc = Jsoup.parse(html); // 只处理非 <pre> 的内容 Element preElement = doc.selectFirst("pre"); String preContent = preElement.html(); // 保留原始内容 // 对 <pre> 外的内容应用 Jsoup 修改 preElement.html(""); // 清空 <pre> 内容,避免处理它 doc.outputSettings().prettyPrint(true); String formattedHtml = doc.html(); preElement.html(preContent); // 恢复 <pre> 的原始内容 System.out.println(formattedHtml); } }
import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; public class JsoupPreTagExample { public static void main(String[] args) { String html = "<pre> Some preformatted\n text here. </pre>"; Document doc = Jsoup.parse(html); // 只处理非 <pre> 的内容 Element preElement = doc.selectFirst("pre"); String preContent = preElement.html(); // 保留原始内容 // 对 <pre> 外的内容应用 Jsoup 修改 preElement.html(""); // 清空 <pre> 内容,避免处理它 doc.outputSettings().prettyPrint(true); String formattedHtml = doc.html(); preElement.html(preContent); // 恢复 <pre> 的原始内容 System.out.println(formattedHtml); } }
如果可以升级 Jsoup 的版本,请查看新版本中是否提供更直接的配置来保留 pre 标签的原始内容。比如,Jsoup 1.16+ 版本可能在处理格式化上有所优化。
升级后,可以结合 OutputSettings 来调试。
java复制代码// 示例配置 doc.outputSettings().prettyPrint(false).indentAmount(0);
// 示例配置 doc.outputSettings().prettyPrint(false).indentAmount(0);
在某些场景下,可以在解析 HTML 之前,先用正则表达式或其他方法提取 pre 的内容并单独处理,然后在完成其他处理后再插入。
通过这些方法,可以有效解决 Jsoup 处理 pre 标签导致内容被格式化的问题。
再次下载
iPhone浏览器用户: 1.点击手机桌面“文件”图标 2.在“下载”目录中查找