Bagikan melalui


Kueri XPath dan Namespace

Kueri XPath mengetahui namespace dalam dokumen XML dan dapat menggunakan awalan namespace untuk memenuhi elemen dan nama atribut. Elemen yang memenuhi syarat dan nama atribut dengan awalan namespace membatasi simpul yang dikembalikan oleh kueri XPath hanya untuk simpul yang termasuk dalam namespace tertentu.

Misalnya, jika prefiks books dipetakan ke namespace http://www.contoso.com/books, maka kueri XPath /books:books/books:book berikut hanya akan memilih elemen book di dalam namespace http://www.contoso.com/books.

The XmlNamespaceManager

Untuk menggunakan namespace dalam kueri XPath, objek yang berasal dari antarmuka IXmlNamespaceResolver seperti kelas XmlNamespaceManager dibangun dengan URI namespace dan awalan untuk disertakan dalam kueri XPath.

Objek XmlNamespaceManager dapat digunakan dalam kueri dengan masing-masing cara berikut.

Berikut ini adalah metode XPathNavigator kelas yang menerima objek yang berasal dari IXmlNamespaceResolver antarmuka sebagai parameter.

The Default Namespace

Dalam dokumen XML yang berikut, namespace default dengan awalan kosong digunakan untuk mendeklarasikan namespace http://www.contoso.com/books.

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

XPath memperlakukan awalan kosong sebagai null namespace. Dengan kata lain, hanya awalan yang dipetakan ke namespace yang dapat digunakan dalam kueri XPath. Ini berarti bahwa jika Anda ingin mengkueri terhadap namespace dalam dokumen XML, meskipun itu adalah namespace default, Anda perlu menentukan awalan untuk itu.

Misalnya, tanpa menentukan awalan untuk dokumen XML di atas, kueri /books/book XPath tidak akan mengembalikan hasil apa pun.

Awalan harus dihubungkan untuk menghindari ambiguitas saat melakukan kueri pada dokumen dengan beberapa node yang tidak berada di dalam namespace, dan beberapa berada di dalam namespace default.

Kode berikut menentukan awalan untuk namespace default dan memilih semua book elemen dari http://www.contoso.com/books namespace.

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", "http://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", "http://www.contoso.com/books");  
query.SetContext(manager);  
XPathNodeIterator nodes = navigator.Select(query);  

Lihat juga