Явный HTML неправильно анализируется JSoup

Я использую JSoup для разбора HTML. Обычно он работает нормально, но в некоторых явных примерах он меняет последовательность элементов в HTML после синтаксического анализа. Вот простой код:

String str1 = originalHtmlFragment;
Document doc = Jsoup.parseBodyFragment(str1);
String str2 = doc.html();

Вот значения str1 и str2.

стр1:

        <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>

ул2:

<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