XPath немедленного дочернего текста против всего текста потомков?

57
6

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

<ul class="categories">
<li>My top level category
<ul>
<li>my second level category</li>
</ul>
</li>
</ul>

Я хочу получить имя категории верхнего уровня, используя следующий xpath:

//ul[@class='categories']/li/text()

Но это, очевидно, возвращает весь текст этого слова, включая категории второго уровня.

Как получить категорию верхнего уровня с помощью xpath. Вы можете предположить, что категории будут только на два уровня (категории верхнего уровня и второго уровня).

спросил(а) 2016-08-05T15:58:00+03:00 4 года, 1 месяц назад
1
Решение
109

Но это, очевидно, возвращает весь текст этого слова, включая категории второго уровня.

На самом деле, no, //ul[@class='categories']/li/text() возвращает только прямые текстовые узлы дочерних элементов совпадающих //ul[@class='categories']/li элементов. В этом случае: My top level category.

Если бы вы указали один из следующих XPaths, вы бы также выбрали my second level category:

    //ul[@class='categories']/li//text() string(//ul[@class='categories']/li)

ответил(а) 2016-08-05T16:22:00+03:00 4 года, 1 месяц назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема