Я пытаюсь использовать XPath для поиска всех элементов, которые имеют элемент в данном пространстве имен.
Например, в следующем документе я хочу найти элементы foo: bar и doodah
<?xml version="1.0" encoding="UTF-8"?>
<root xmlns:foo="http://foo.example.com">
<foo:bar quux="value">Content</foo:bar>
<widget>Content</widget>
<doodah foo:quux="value">Content</doodah>
</root>
Я знаю, что я могу использовать следующее выражение XPath для загрузки всех атрибутов из заданного пространства имен
"//@*[namespace-uri()='http://foo.example.com']"
Однако:
- Это не дает мне элементов, просто атрибутов и
- где элементы содержат несколько атрибутов из этого пространства имен, этот XPath возвращает результат за атрибут, а не за элемент
Можно ли получить то, что я хочу, или просто мне нужно собрать атрибуты и вычислить уникальный набор элементов, которым они соответствуют?
РЕДАКТОР: Мне дал следующий ответ Димитрия Новачева. Я не понимал, что вы можете вложить предикаты внутри предикатов следующим образом:
"//*[@*[namespace-uri()='http://foo.example.com']]"
В частности, это говорит "Любой элемент, который имеет любой атрибут, который имеет namespace-uri = '..."