Xpath для выбора всех следующих братьев и сестер вместе с соответствующим элементом - PullRequest
0 голосов
/ 18 января 2019

Предположим, что HTML похож на:

<h3>Ignore h3</h3>
<p>Ignore p</p>
<h2>Locator</h2>
<h3>Header 1</h3>
<p>Paragraph 1.1</p>
<h3>Header 2</h3>
<p>Paragraph 2.1</p>
<p>Paragraph 2.2.</p>
<p>Paragraph 2.3.</p>
<h4>test header 4</h4>

И я хочу найти h2, в котором есть текст "Locator" ДОЛЖНО быть с братьями и сестрами, которые идут после этого. Я достиг следующего:

//h2[contains(text(),'Locator')]/following-sibling::*

Он правильно получает братьев и сестер, но не возвращает <h2>Locator</h2> сам. Как заставить селектор выбрать оба?

Ответы [ 2 ]

0 голосов
/ 18 января 2019

Вы можете использовать self также для достижения этой цели:

//h2[contains(text(),'Locator')]/(following-sibling::*|self::*)

См. Ссылку: http://xpather.com/ri9VYf0n

0 голосов
/ 18 января 2019

Вы можете попробовать начать с первого предшествующего брата :

//h2[contains(text(),'Locator')]/preceding-sibling::*[1]/following-sibling::*

, но это не будет работать, если целевой h2 узел - первый дочерний элемент (не имеет предшествующих братьев и сестер)

Так что лучше использовать:

//*[preceding-sibling::h2[.="Locator"]] | //h2[.="Locator"]

, чтобы выбрать все последующие элементы заголовка «Локатор» и самого заголовка.

Или то же самое с вашим начальным XPath

//h2[contains(text(),'Locator')]/following-sibling::* | //h2[contains(text(),'Locator')]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...