XPath для следующего брата и собственного узла? - PullRequest
1 голос
/ 20 июня 2020

Как в коде:

<body>
  <div>1</div>
  <div>2</div>
  <div>3</div>
  <div>4</div>
  <div>5</div>
  <div><span>6</span></div>
  <div>7</div>
  <div>8</div>
</body>

Найти предшествующего брата и собственный узел?

Нужно получить:

<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
<div><span>6</span></div>

Я пытался написать вот так :

//div[span]/self::node()[self::node() and self::node()/preceding-sibling::div]

... но не работает.

Ответы [ 2 ]

1 голос
/ 20 июня 2020

Альтернатива, но, вероятно, менее эффективная:

//span[parent::div]/following::div[1]/preceding::div

Выберите предыдущие div элементы первого div, следующего за элементом span.

Вывод:

Element='<div>1</div>'
Element='<div>2</div>'
Element='<div>3</div>'
Element='<div>4</div>'
Element='<div>5</div>'
Element='<div>
   <span>6</span>
</div>'
1 голос
/ 20 июня 2020

Этот XPath,

//div[span or following-sibling::div[span]]

выберет все div элементы с дочерним элементом span или братьями и сестрами перед таким div элементом:

<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
<div><span>6</span></div>

как запрошено.

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