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']"
しかしながら:
必要なものを取得することは可能ですか、それとも属性を収集して、それらが対応する要素の一意のセットを計算する必要がありますか?
使用する:
//*[namespace-uri()='yourNamespaceURI-here'
or
@*[namespace-uri()='yourNamespaceURI-here']
]
述語2つの条件は、XPath or
演算子で順序付けられます。
したがって、XPath式は、次のいずれかの要素を選択します。
これが何を意味するのかはわかりませんが、XPathで1つの文字を削除するだけで、特定の名前空間のすべての要素を取得できます。
//*[namespace-uri()='http://foo.example.com']
あなたは試すことができます
//*[namespace-uri()='http://foo.example.com' or @*[namespace-uri()='http://foo.example.com']]
要素foo:barと要素doodahを提供します(XMLデータでtal:quux
をfoo:quux
に変更した場合):
<?xml version="1.0" encoding="UTF-8"?>
<root xmlns:foo="http://foo.example.com" xmlns:tal="xxx">
<foo:bar quux="value">Content</foo:bar>
<widget>Content</widget>
<doodah foo:quux="value">Content</doodah>
</root>
それはあなたが望むものですか?
XPath式はほぼ完璧です。属性を要求する代わりに "@ "要素を要求する ""そしてそれは機能するはずです:
"//*[namespace-uri()='http://foo.example.com']"