Явният HTML е неправилно анализиран от 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?


person Alexey Ce    schedule 02.12.2015    source източник


Отговори (1)


Опитвате се да анализирате низ, който не е истински HTML, тъй като ac:macro не е разрешено име на етикет. JSoup се опитва да направи нещо разумно, но във вашия случай очевидно се проваля в този опит. Ако можете да превключите към изпълнението на XMLparser, ще получите очакваните резултати:

Document doc = Jsoup.parse(str1,"",Parser.xmlParser());
person luksch    schedule 02.12.2015
comment
@AlexeyCe, ако смятате, че отговорът ви е помогнал, моля, помислете дали да не го приемете. Това ще маркира този въпрос като отговорен. вижте тук за подробности: meta.stackexchange .com/questions/5234/ - person luksch; 04.12.2015
comment
здрасти Да, опитах се да гласувам, но нямам достатъчно точки. Отбелязах знака 'v', тъй като ми е разрешен. Благодаря! :) - person Alexey Ce; 05.12.2015