XPath для поиска последнего текстового узла в элементе - PullRequest
0 голосов
/ 05 сентября 2018

Как выбрать последний текст в элементе a?

Элемент может иметь дочерние элементы.

<a>bla di bla <b>foo bar</b> yes!</a>

должен дать мне "да!" и

<a>bla di bla <b>foo bar</b></a>

должен дать мне "foo bar" и

<a>bla di bla</a>

должен дать мне "бла-ди-бла"

Ответы [ 3 ]

0 голосов
/ 05 сентября 2018

Используйте этот Xpath:

//*/text()[last()]
0 голосов
/ 05 сентября 2018

Я бы использовал //a/descendant::text()[last()], который выбирает три текстовых узла

 yes!
foo bar
bla di bla

в образце

<body>
<a>bla di bla <b>foo bar</b> yes!</a>
<a>bla di bla <b>foo bar</b></a>
<a>bla di bla</a>
</body>

онлайн-образец с XQuery на https://xqueryfiddle.liberty -development.net / nbUY4kn .

Предлагаемое выражение пути //a/descendant::text()[last()] работает с XPath 1 и более поздними версиями.

0 голосов
/ 05 сентября 2018

Это XPath,

(/a//text())[last()]

выберет последний текстовый узел среди потомков текстовых узлов a.


Обновление: OP указал, что в документе может быть несколько элементов a, и хотел бы, чтобы последний потомок текстового узла был выбран для каждого элемента a.

Это выражение XPath 2.0,

for $a in //a 
  return ($a//text())[last()]

удовлетворит обновленные требования.

...