Как найти прямых потомков, которые содержат узлы с указанным текстом с помощью xpath? - PullRequest
0 голосов
/ 27 апреля 2018

Мне нужно извлечь все дочерние элементы, у которых есть узлы с некоторым текстом. Структура HTML может быть следующей:

<div>
  <div>
    A
  </div>
  <p>
    <b>A</b>
  </p>
  <span>
    B
  </span>
</div>

Мне нужно извлечь дочерние узлы с текстом "A". Он должен вернуть div и p узлы

Я пробовал следующие xpaths:

./*/*[contains(text(), 'A')]
./*/*[./*[contains(text(), 'A')]]

но первый возвращает только div с текстом "A", а второй возвращает только p с текстом "A"

Можно ли построить xpath, который будет возвращать обоих детей?

Узел, содержащий текст "A", может находиться на любом уровне в дочернем узле

Ответы [ 2 ]

0 голосов
/ 27 апреля 2018

Я подозреваю, что в этом случае в заголовке "содержит ()" неверно, если только вы действительно не хотите выбрать узел со значением "HAT", а также узел со значением "А".

Попробуйте

*/*[normalize-space(.)='A']
0 голосов
/ 27 апреля 2018

Если вам нужен XPath, который возвращает оба дочерних узла, попробуйте использовать

./*/*[contains(., "A")]
...