JSoup错误地解析了显式HTML

问题描述 投票:1回答:1

我正在使用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中解决这个问题?

macros jsoup confluence
1个回答
0
投票

您尝试解析不是真正HTML的字符串,因为ac:macro不是允许的标记名称。 JSoup试图做一些明智的事情,但在你的情况下,它显然在这次尝试中失败了。如果您可以切换到XMLparser实现,则可以按预期获得结果:

Document doc = Jsoup.parse(str1,"",Parser.xmlParser());
© www.soinside.com 2019 - 2024. All rights reserved.