JSoup 错误地解析了显式 HTML
Explicit HTML is incorrectly parsed by JSoup
我正在使用 JSoup 进行解析 HTML。它通常工作正常,但在一些明确的示例中,它在解析后更改 HTML 中的元素序列。这是简单的代码:
String str1 = originalHtmlFragment;
Document doc = Jsoup.parseBodyFragment(str1);
String str2 = doc.html();
这里是 str1 和 str2 的值。
str1:
<table>
<tbody>
<tr>
<th>
<p> </p>
<p>10</p>
</th>
</tr>
<tr>
<td colspan="1">
<p>
<ac:macro ac:name="my-macro">
<ac:parameter ac:name="outer-values">Page content</ac:parameter>
<ac:parameter ac:name="atlassian-macro-output-type">INLINE</ac:parameter>
<ac:rich-text-body>
<p>a1</p>
</ac:rich-text-body>
</ac:macro>
</p>
</td>
</tr>
</tbody>
</table>
str2:
<html>
<head></head>
<body>
<table>
<tbody>
<tr>
<th>
<p> </p>
<p>10</p>
</th>
</tr>
<tr>
<td colspan="1">
<p>
<ac:macro ac:name="my-macro">
<ac:parameter ac:name="outer-values">Page content</ac:parameter>
<ac:parameter ac:name="atlassian-macro-output-type">INLINE</ac:parameter>
<ac:rich-text-body></ac:rich-text-body>
</ac:macro>
</p>
<p>a1</p>
<p>
</p>
</td>
</tr>
</tbody>
</table>
</body>
</html>
请注意,在第二个代码示例中,a1 在 ac:macro 标记之外。
我如何在 JSoup 中解决这个问题?
您尝试解析一个不真实的字符串 HTML,因为 ac:macro
不是允许的标签名称。 JSoup 试图做一些明智的事情,但在你的情况下,它显然在这次尝试中失败了。如果您可以切换到 XMLparser 实现,您将获得预期的结果:
Document doc = Jsoup.parse(str1,"",Parser.xmlParser());
我正在使用 JSoup 进行解析 HTML。它通常工作正常,但在一些明确的示例中,它在解析后更改 HTML 中的元素序列。这是简单的代码:
String str1 = originalHtmlFragment;
Document doc = Jsoup.parseBodyFragment(str1);
String str2 = doc.html();
这里是 str1 和 str2 的值。
str1:
<table>
<tbody>
<tr>
<th>
<p> </p>
<p>10</p>
</th>
</tr>
<tr>
<td colspan="1">
<p>
<ac:macro ac:name="my-macro">
<ac:parameter ac:name="outer-values">Page content</ac:parameter>
<ac:parameter ac:name="atlassian-macro-output-type">INLINE</ac:parameter>
<ac:rich-text-body>
<p>a1</p>
</ac:rich-text-body>
</ac:macro>
</p>
</td>
</tr>
</tbody>
</table>
str2:
<html>
<head></head>
<body>
<table>
<tbody>
<tr>
<th>
<p> </p>
<p>10</p>
</th>
</tr>
<tr>
<td colspan="1">
<p>
<ac:macro ac:name="my-macro">
<ac:parameter ac:name="outer-values">Page content</ac:parameter>
<ac:parameter ac:name="atlassian-macro-output-type">INLINE</ac:parameter>
<ac:rich-text-body></ac:rich-text-body>
</ac:macro>
</p>
<p>a1</p>
<p>
</p>
</td>
</tr>
</tbody>
</table>
</body>
</html>
请注意,在第二个代码示例中,a1 在 ac:macro 标记之外。 我如何在 JSoup 中解决这个问题?
您尝试解析一个不真实的字符串 HTML,因为 ac:macro
不是允许的标签名称。 JSoup 试图做一些明智的事情,但在你的情况下,它显然在这次尝试中失败了。如果您可以切换到 XMLparser 实现,您将获得预期的结果:
Document doc = Jsoup.parse(str1,"",Parser.xmlParser());