Использование данных с тегами и без тегов в XPath - PullRequest
3 голосов
/ 21 августа 2011

Я пытаюсь проанализировать HTML с помощью XPath в Java.Рассмотрим этот HTML-код:

    <td class="postbody"> 
        <img src="...""><br />
<br />
<b>What is Blah?</b><br />
<br />
Blah blah blah
<br />

Обратите внимание, что «What Is Blah» содержится в теге ab и поэтому легко разбирается.Но "Бла-бла-бла" открыт, и поэтому я могу только поднять его, вызвав text () на его родительском узле.

Дело в том, что мне нужно пройти через это последовательно, помещаяimg вниз, затем выделенный жирным шрифтом текст, затем основной текст.Важно, что все заканчивается по порядку (его не нужно обрабатывать по порядку, если вы можете предложить способ, который занимает два прохода).

Так есть ли какие-либо предложения о том, как, если я получил вышесодержится в узле Java XPath, я могу пройти по очереди и получить то, что мне нужно?

Ответы [ 2 ]

1 голос
/ 21 августа 2011

Используйте это выражение XPath , оцененное с родительским элементом предоставленного фрагмента XML в качестве узла контекста:

node()

Это выбирает каждый узел - дочерний узел узла контекста - каждый элемент-child, каждый дочерний текстовый узел, каждый дочерний комментарий и каждый PI (инструкция обработки) - дочерний элемент.

Если вы хотите исключить комментарии и PI, используйте :

node()[not(self::comment() or self::processing-instruction)]

Если в дополнение к этому вы не хотите выбирать пустые текстовые узлы, используйте :

node()
  [not(self::comment() or self::processing-instruction)]
    [not(self::text()[string-length() = 0])]
1 голос
/ 21 августа 2011

Я думаю, что парсер на базе SAX был бы лучшим инструментом для решения этой проблемы.Он основан на событиях, поэтому вы можете анализировать ваш XML-документ по порядку.

Но это анализатор XML, поэтому вам нужно иметь действительный XML-документ.Я никогда не использовал JTidy , но это Java-порт HTML Tidy, так что, надеюсь, он поможет вам преобразовать ваши (недействительные) документы HTML в действительный XML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...