【发布时间】:2013-12-14 06:03:06
【问题描述】:
我在使用 Jsoup 替换给定 HTML 中所有 <pre> 元素中的换行符时遇到问题。
这是我到目前为止所尝试的,以及我面临的问题。
我正在尝试将所有\n 字符替换为仅在所有<pre> 标记中的innerHtml 的<br>。我想保留其余内容。
代码是:
String body = "<p>This is the output:</p>\n<pre class=\"lang-xml prettyprint prettyprinted\">\n<code><span class=\"dec\"><!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\"></span><span class=\"pln\">\n</span><span class=\"tag\"><HTML></span><span class=\"pln\">\n </span><span class=\"tag\"><HEAD></span><span class=\"pln\">\n </span><span class=\"tag\"><META</span><span class=\"pln\"> </span><span class=\"atn\">http-equiv</span><span class=\"pun\">=</span><span class=\"atv\">\"Content-Type\"</span><span class=\"pln\"> </span><span class=\"atn\">content</span><span class=\"pun\">=</span><span class=\"atv\">\"text/html; charset=iso-8859-1\"</span><span class=\"tag\">></span><span class=\"pln\">\n </span><span class=\"tag\"><TITLE></span><span class=\"pln\">GeteBayOfficialTime</span><span class=\"tag\"></TITLE></span><span class=\"pln\">\n </span><span class=\"tag\"></HEAD></span><span class=\"pln\">\n </span><span class=\"tag\"><BODY></span><span class=\"pln\">\n\n* About to connect() to api.ebay.com port 443 (#0)\n* Trying 66.135.211.100... * Timeout\n* Trying 66.135.211.140... * Timeout\n* Trying 66.211.179.150... * Timeout\n* Trying 66.211.179.180... * Timeout\n* Trying 66.135.211.101... * Timeout\n* Trying 66.211.179.148... * Timeout\n* connect() timed out!\n* Closing connection #0\n</span><span class=\"tag\"><P></span><span class=\"pln\">Error sending request</span></code></pre>";
log.info("printing before creating a Jsoup Doc "+ body);
Document bodyDom = Jsoup.parse(body);
log.info("printing after creating a Jsoup Doc "+ bodyDom.html());
Elements preTags = bodyDom.getElementsByTag("pre");
for (Element pre : preTags) {
pre.html(pre.html().replaceAll("(\r\n|\n)", "<br />"));
log.info("Pre element with linebreaks replaced -" + pre);
}
body = bodyDom.html();
这是日志,一旦我解析 Jsoup 文档,似乎 html 源代码正在丢失换行符。 :
**2013-12-10 10:14:59 INFO FormattingTest:166** - printing before creating a Jsoup Doc <p>This is the output:</p>
<pre class="lang-xml prettyprint prettyprinted">
<code><span class="dec"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"></span><span class="pln">
</span><span class="tag"><HTML></span><span class="pln">
</span><span class="tag"><HEAD></span><span class="pln">
</span><span class="tag"><META</span><span class="pln"> </span><span class="atn">http-equiv</span><span class="pun">=</span><span class="atv">"Content-Type"</span><span class="pln"> </span><span class="atn">content</span><span class="pun">=</span><span class="atv">"text/html; charset=iso-8859-1"</span><span class="tag">></span><span class="pln">
</span><span class="tag"><TITLE></span><span class="pln">GeteBayOfficialTime</span><span class="tag"></TITLE></span><span class="pln">
</span><span class="tag"></HEAD></span><span class="pln">
</span><span class="tag"><BODY></span><span class="pln">
* About to connect() to api.ebay.com port 443 (#0)
* Trying 66.135.211.100... * Timeout
* Trying 66.135.211.140... * Timeout
* Trying 66.211.179.150... * Timeout
* Trying 66.211.179.180... * Timeout
* Trying 66.135.211.101... * Timeout
* Trying 66.211.179.148... * Timeout
* connect() timed out!
* Closing connection #0
</span><span class="tag"><P></span><span class="pln">Error sending request</span></code></pre>
**2013-12-10 10:14:59 INFO FormattingTest:168** - printing after creating a Jsoup Doc <html>
<head></head>
<body>
<p>This is the output:</p>
<pre class="lang-xml prettyprint prettyprinted">
<code><span class="dec"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"></span><span class="pln"> </span><span class="tag"><HTML></span><span class="pln"> </span><span class="tag"><HEAD></span><span class="pln"> </span><span class="tag"><META</span><span class="pln"> </span><span class="atn">http-equiv</span><span class="pun">=</span><span class="atv">"Content-Type"</span><span class="pln"> </span><span class="atn">content</span><span class="pun">=</span><span class="atv">"text/html; charset=iso-8859-1"</span><span class="tag">></span><span class="pln"> </span><span class="tag"><TITLE></span><span class="pln">GeteBayOfficialTime</span><span class="tag"></TITLE></span><span class="pln"> </span><span class="tag"></HEAD></span><span class="pln"> </span><span class="tag"><BODY></span><span class="pln"> * About to connect() to api.ebay.com port 443 (#0) * Trying 66.135.211.100... * Timeout * Trying 66.135.211.140... * Timeout * Trying 66.211.179.150... * Timeout * Trying 66.211.179.180... * Timeout * Trying 66.135.211.101... * Timeout * Trying 66.211.179.148... * Timeout * connect() timed out! * Closing connection #0 </span><span class="tag"><P></span><span class="pln">Error sending request</span></code></pre>
</body>
</html>
2013-12-10 10:14:59 INFO FormattingTest:174 - Pre element with linebreaks replaced - <pre class="lang-xml prettyprint prettyprinted"><code><span class="dec"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"></span><span class="pln"> </span><span class="tag"><HTML></span><span class="pln"> </span><span class="tag"><HEAD></span><span class="pln"> </span><span class="tag"><META</span><span class="pln"> </span><span class="atn">http-equiv</span><span class="pun">=</span><span class="atv">"Content-Type"</span><span class="pln"> </span><span class="atn">content</span><span class="pun">=</span><span class="atv">"text/html; charset=iso-8859-1"</span><span class="tag">></span><span class="pln"> </span><span class="tag"><TITLE></span><span class="pln">GeteBayOfficialTime</span><span class="tag"></TITLE></span><span class="pln"> </span><span class="tag"></HEAD></span><span class="pln"> </span><span class="tag"><BODY></span><span class="pln"> * About to connect() to api.ebay.com port 443 (#0) * Trying 66.135.211.100... * Timeout * Trying 66.135.211.140... * Timeout * Trying 66.211.179.150... * Timeout * Trying 66.211.179.180... * Timeout * Trying 66.135.211.101... * Timeout * Trying 66.211.179.148... * Timeout * connect() timed out! * Closing connection #0 </span><span class="tag"><P></span><span class="pln">Error sending request</span></code></pre>
不知道出了什么问题。这与另一个 html 源一起工作 - "\n回应 :\n 一些 xt \n \ndsjkhskjdh sdjhasjkdas \n"
正确转换为 -
响应:
一些文本
dsjkhskjdh sdjhasjkdas
不知道为什么第一个样本没有!!
【问题讨论】:
-
使用parseBodyFragment 可能会更好,因为您的 HTML 示例不是一个完整的页面。
-
谢谢,会尝试并通知您。
-
不幸的是,它没有帮助,它仍然删除所有换行符。