XPATH текущий элемент и ниже

12
Samail
На сайте с 10.05.2007
Offline
361
908

Всё что ниже span с текстом 123, у нас так:

//span[text()="123"]/following::*

а как написать что-бы выбрать и то что ниже и этот span?

melkozaur
На сайте с 06.04.2010
Offline
505
#1

Пример куска html-кода приведите.

Серверы в NL/US со скидкой 30% нашим читателям: E5-2650v4/10GB DDR4/240GB SSD/1 Gbps - от $20: https://ua-hosting.company/vps/nl SEO без компромиссов: https://seoleaks.net SEOLEAKS - продвижение сайтов: https://www.instagram.com/seoleaks
Samail
На сайте с 10.05.2007
Offline
361
#2

<body>

<p>55555</p>
<div>555555555</div>
<p><span>123</span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>66666
<p>&nbsp;</p>
<p>444444</p>
<div><p>333</p></div>
</body>

Получить нужно:

<p><span>123</span></p>

<p>&nbsp;</p>
<p>&nbsp;</p>
<p>66666
<p>&nbsp;</p>
<p>444444</p>
<div><p>333</p></div>
ДП
На сайте с 23.11.2009
Offline
203
#3

Вообще в xpath есть "условие" или в запросах, т.е. будет что-то типа такого:

//span[text()="123"]/following::* | //span[text()="123"] 

Или то же самое (т.е. два запроса) сделать на программноом уровне, а результаты объединить. Ну это если у вас там не на xslt пишете, например.

Samail
На сайте с 10.05.2007
Offline
361
#4

2 запроса я могу сделать, но мне нужно в одном написать, т.к. условий будет много и если я понадобится поменять "123" на "123 or 456" мне это в двух местах придётся менять.

ДП
На сайте с 23.11.2009
Offline
203
#5

Ну так-то технически с | будет один запрос, но текст в двух местах менять надо будет, да.

Samail
На сайте с 10.05.2007
Offline
361
#6

А как найти элемент содержащий только пробелы и <br>?

//p[not(text())] совсем без текста находит (<p ></p>)

//p[text()="&nbsp;"] такое уже не находит (<p >&nbsp;</p>)

В идеале хотелось бы найти такое безобразие:

<p>&nbsp;<br>&nbsp;<br>&nbsp;<br><br><br><br><br><br><br><br><br><br><br></p>
ДП
На сайте с 23.11.2009
Offline
203
#7

Я бы попробовал с replace() поиграться. т.е. все <br> и &nbsp; заменить на пустую строку и итоговый текст сранивать с пустой строкой.

Но не уверен, что replace() работает в запросах

Samail
На сайте с 10.05.2007
Offline
361
#8

Пробовал replace("&nbsp;","") не заменяет

ДП
На сайте с 23.11.2009
Offline
203
#9

у replace() три аргумента, первый - где заменять. Должно быть что-то типа replace(text(),"&nbsp;","") - и еще посмотреть как на амперсенды она реагирует, возможно надо через &amp; писать.

Samail
На сайте с 10.05.2007
Offline
361
#10

Оно именно "&nbsp;" не находит, простой текст находит, видимо "&nbsp;" как-то по другому написать нужно.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий