Извлечение и группировка всех текстовых узлов с использованием Xpath 2.0 - PullRequest
0 голосов
/ 14 января 2012

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

данный документ:

<root>
    <div>
        some text
        <p>some other text</p>
    </div>

    <div>
        another text
        <b>yet another text <em>even more</em></b>
        end of text
    </div>
</root>

Я хотел бы построить выражение, которое возвращает ДВА элемента:

 [0] some text someother text
 [1] another text yet another text even more end of text

Я перепробовал много выражений, но мне, кажется, что-то здесь не хватает, легко извлечь отдельные div (просто // div), но как сгруппировать их и объединить все подузлы text () в каждом div отдельно?

Ответы [ 3 ]

1 голос
/ 14 января 2012

В XPath 2.0 (и при условии, что ваш ввод правильно сформирован с некоторыми добавленными </b>), вы можете использовать путь типа /root/div/normalize-space(), который дает вам последовательность из двух строк: «некоторый текст, другой текст» и «другой текст».еще один текст, еще больше конец текста ".

1 голос
/ 14 января 2012

text() ваш друг здесь:

Вы должны сделать это в два этапа.

//div

тогда:

//text()

А затем программно объединить их.

XPath является языком запросов, так же, как селекторы CSS и не может преобразовывать вещи. Все функции (например, normalize-text) предназначены для того, чтобы уточнить ваш селектор, чтобы не изменять сам вход.

См .: как заставить работать функцию xpath normalize-space ()?

0 голосов
/ 14 января 2012

XPath не может создавать новые узлы: для этого вам нужен XSLT или XQuery.Поэтому выражение никогда не сможет вернуть элемент, которого нет в вашем исходном документе.Однако в XPath 2.0 вы можете легко вернуть две строки: за исключением незначительных пробелов, вы можете получить требуемый результат из выражения //div/normalize-space(.)

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