Как извлечь узлы без немедленного текста после них с XPath 1.0?

xml xpath xpath-1.0

82 просмотра

1 ответ

Как выбрать определенные узлы, которые имеют по крайней мере один узел-потомок, но не имеют непосредственного текстового узла после них, используя одно выражение XPath 1.0?

Например, из следующего XML:

<p>This is some <b>forma</b><b>tted</b> text, this is <b>bold</b>.</p>

Я хочу извлечь первый <b>тег.

До сих пор я придумал следующее выражение:

//b[following-sibling::*[1][self::b]][not(text() = following-sibling::text()[1]/preceding-sibling::*[1][self::b]/text())]

Однако он не будет извлекать теги с идентичным текстом, например:

<p>I am hungry for <b>paw</b><b>paw</b>.</p>

Может ли быть лучше и проще?

Автор: Cuder Источник Размещён: 15.07.2019 01:26

Ответы (1)


2 плюса

Решение

Этот XPath,

//*[following-sibling::node()[1][not(self::text())]]

выберет все элементы, которые имеют непосредственно следующий родной элемент, который не является текстовым узлом.

Автор: kjhughes Размещён: 05.03.2019 12:52
Вопросы из категории :
32x32