XPath: тег «Исключить» в «InnerHtml» (<a href=""> InnerHtml <span>excludeme </span></a> - PullRequest
1 голос
/ 22 сентября 2009

Я использую XPath для запроса HTML-сайтов, которые пока работают довольно хорошо, но теперь я столкнулся с (кирпичной) стеной и не могу найти решение: -)

HTML выглядит так:

<ul>
<li><a href="">Text1<span>AnotherText1</span></a></li>
<li><a href="">Text2<span>AnotherText2</span></a></li>
<li><a href="">Text3<span>AnotherText3</span></a></li>
</ul>

Я хочу выбрать часть "TextX", но НЕ часть AnotherTextX в <span></span> До сих пор я не мог придумать какое-либо (чистое) решение XPath для этого (и в моей установке мне, к сожалению, нужно чистое решение XPath.

Это выбирает то, что я хочу, но это приводит к «TextXAnotherTextX», и мне нужен только «TextX».

/ul/li/a

Есть намеки? : -)

1 Ответ

2 голосов
/ 22 сентября 2009

Получается первый дочерний узел прямого текста <a>:

/ul/li/a/text()[1]

и вы получите любой дочерний узел с прямым текстом (отдельно):

/ul/li/a/text()

Оба вышеприведенных возвращают "TextX", но если у вас было:

<li><a href="">Text4<span>AnotherText3</span>TrailingText</a></li>

тогда последний вернется: ["Text4", "TrailingText"], тогда как первый вернет только "Text4".

Ваше выражение /ul/li/a получает строковое значение <a>, которое определяется как объединение строкового значения всех дочерних элементов <a>, поэтому вы получаете "TextXAnotherTextX".

...