XPath クエリおよび名前空間

XPath クエリは XML ドキュメント中の名前空間を認識し、名前空間プレフィックスを使用して要素と属性名を修飾することができます。名前空間プレフィックスで要素や属性の名前を修飾すると、XPath クエリで返されるノードを特定の名前空間に属するノードだけに限定することができます。

たとえば、プレフィックス books が名前空間 https://www.contoso.com/books に割り当てられると、XPath クエリ /books:books/books:book は名前空間 https://www.contoso.com/books 内の book 要素だけを選択します。

XmlNamespaceManager

XPath クエリで名前空間を使用するために、XmlNamespaceManager クラスに似た IXmlNamespaceResolver インターフェイスから派生したオブジェクトが、名前空間 URI と XPath クエリに含まれるプレフィックスを使用して作成されます。

XmlNamespaceManager オブジェクトは次の方法でクエリで使用することができます。

次は、IXmlNamespaceResolver インターフェイスから派生したオブジェクトをパラメーターとして受け付ける XPathNavigator クラスのメソッドです。

既定の名前空間

次の XML ドキュメントでは、https://www.contoso.com/books 名前空間を宣言するために、空のプレフィックスの既定の名前空間が使用されています。

<books xmlns="http://www.example.com/books">
    <book>
        <title>Title</title>
        <author>Author Name</author>
        <price>5.50</price>
    </book>
</books>

XPath は空のプレフィックスを null 名前空間として取り扱います。つまり、XPath クエリでは、名前空間に割り当てられたプレフィックスだけを使用できます。このことは、XML ドキュメント内の名前空間に対してクエリする場合、たとえそれが既定の名前空間であっても、そのプレフィックスを定義する必要があることを意味します。

たとえば、上記の XML ドキュメントでプレフィックスを定義しなければ、XPath クエリ /books/book は何も結果を返しません。

ドキュメントで、名前空間内にないノードと既定の名前空間内のノードに対してクエリを行う場合には、あいまいさを避けるために、プレフィックスを付加しなければなりません。

次のコードは、既定の名前空間のプレフィックスを定義し、https://www.contoso.com/books 名前空間からすべての book 要素を選択します。

Dim document As XPathDocument = New XPathDocument("books.xml")
Dim navigator As XPathNavigator = document.CreateNavigator()
Dim query As XPathExpression = navigator.Compile("/books:books/books:book")
Dim manager As XmlNamespaceManager = New XmlNamespaceManager(navigator.NameTable)
manager.AddNamespace("books", "https://www.contoso.com/books")
query.SetContext(manager)
Dim nodes As XPathNodeIterator = navigator.Select(query)
XPathDocument document = new XPathDocument("books.xml");
XPathNavigator navigator = document.CreateNavigator();
XPathExpression query = navigator.Compile("/books:books/books:book");
XmlNamespaceManager manager = new XmlNamespaceManager(navigator.NameTable);
manager.AddNamespace("books", "https://www.contoso.com/books");
query.SetContext(manager);
XPathNodeIterator nodes = navigator.Select(query);

参照

参照

XmlDocument

XPathDocument

XPathNavigator

概念

XPath データ モデルを使用した XML データの処理

XPathNavigator を使用した XML データの選択

XPathNavigator による Xpath 式の評価

XPathNavigator によるノードの一致

XPath クエリで認識されるノード型

コンパイルされた XPath 式