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>&nbsp;</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());