XPath Sorguları ve Ad Alanları

XPath sorguları bir XML belgesindeki ad alanlarının farkındadır ve öğe ve öznitelik adlarını nitelemek için ad alanı ön eklerini kullanabilir. Ad alanı ön ekine sahip öğe ve öznitelik adlarının nitelenmesi, XPath sorgusu tarafından döndürülen düğümleri yalnızca belirli bir ad alanına ait düğümlerle sınırlar.

Örneğin, ön ek books ad alanına http://www.contoso.com/bookseşlerse, aşağıdaki XPath sorgusu /books:books/books:book yalnızca book ad http://www.contoso.com/booksalanındaki öğeleri seçer.

The XmlNamespaceManager

Bir XPath sorgusunda ad alanlarını kullanmak için, sınıfı gibi XmlNamespaceManager arabirimden IXmlNamespaceResolver türetilen bir nesne, XPath sorgusuna eklenecek ad alanı URI'si ve ön eki ile oluşturulur.

XmlNamespaceManager Nesnesi sorguda aşağıdaki yollardan her birinde kullanılabilir.

Aşağıda, sınıfın XPathNavigator arabirimden IXmlNamespaceResolver türetilmiş bir nesneyi parametre olarak kabul eden yöntemleri yer alır.

Varsayılan Ad Alanı

Aşağıdaki XML belgesinde, ad alanını bildirmek http://www.contoso.com/books için boş ön eke sahip varsayılan ad alanı kullanılır.

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

XPath boş ön eki ad alanı olarak ele alır null . Başka bir deyişle, XPath sorgularında yalnızca ad alanlarına eşlenen ön ekler kullanılabilir. Başka bir deyişle, XML belgesindeki bir ad alanına karşı sorgu yapmak istiyorsanız, varsayılan ad alanı olsa bile, bunun için bir ön ek tanımlamanız gerekir.

Örneğin, yukarıdaki XML belgesi için bir ön ek tanımlamadan XPath sorgusu /books/book hiçbir sonuç döndürmez.

Bazı düğümleri ad alanında olmayan ve bazıları varsayılan ad alanında olan belgeleri sorgularken belirsizliği önlemek için bir ön ek bağlanmalıdır.

Aşağıdaki kod, varsayılan ad alanı için bir ön ek tanımlar ve ad alanındaki book tüm öğeleri http://www.contoso.com/books seçer.

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);  

Ayrıca bkz.