Выберите элемент в пространстве имен с XPath - PullRequest
12 голосов
/ 22 сентября 2008

Я хочу выбрать самый верхний элемент в документе, который имеет заданное пространство имен (префикс).

Более конкретно: у меня есть документы XML, которые начинаются либо с / html / body (в пространстве имен XHTML), либо с одного из нескольких элементов в определенном пространстве имен. Я фактически хочу удалить / html / body и просто вернуть содержимое тела ИЛИ весь корневой элемент пространства имен.

Ответы [ 2 ]

9 голосов
/ 22 сентября 2008

В XPath 2.0 и XQuery 1.0 вы можете проверять префикс пространства имен, используя в предикате функцию in-scope-prefixes () . например,

//*[in-scope-prefixes(.)='html']

Если вы не можете использовать v2, в XPath 1.0 вы можете использовать функцию namespace-uri () для проверки самого пространства имен. например, * +1008 *

//*[namespace-uri()='http://www.w3c.org/1999/xhtml']
3 голосов
/ 22 сентября 2008

Требуемое выражение XPath:

/html:html/html:body/node()|/foo:*

Где префикс "html" сопоставлен с пространством имен XHTML, а префикс "foo" сопоставлен с моим целевым пространством имен.

...