Udostępnij za pośrednictwem


Zapytania XPath i przestrzenie nazw

Zapytania XPath są świadome przestrzeni nazw w dokumencie XML i mogą używać prefiksów przestrzeni nazw do kwalifikowania nazw elementów i atrybutów. Kwalifikowanie nazw elementów i atrybutów z prefiksem przestrzeni nazw ogranicza węzły zwracane przez zapytanie XPath tylko do tych węzłów należących do określonej przestrzeni nazw.

Jeśli na przykład prefiks books mapuje się na przestrzeń nazw http://www.contoso.com/books, następujące zapytanie /books:books/books:book XPath wybiera tylko te book elementy w przestrzeni nazw http://www.contoso.com/books.

The XmlNamespaceManager

Aby używać przestrzeni nazw w zapytaniu XPath, obiekt pochodzący z interfejsu IXmlNamespaceResolver , takiego jak XmlNamespaceManager klasa, jest konstruowany przy użyciu identyfikatora URI przestrzeni nazw i prefiksu do uwzględnienia w zapytaniu XPath.

Obiekt XmlNamespaceManager może być używany w zapytaniu na każdy z poniższych sposobów.

Poniżej przedstawiono metody XPathNavigator klasy, które akceptują obiekt pochodzący z interfejsu IXmlNamespaceResolver jako parametr.

Domyślna przestrzeń nazw

W poniższym dokumencie XML domyślna przestrzeń nazw z pustym prefiksem jest używana do deklarowania http://www.contoso.com/books przestrzeni nazw.

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

XPath traktuje pusty prefiks jako null przestrzeń nazw. Innymi słowy tylko prefiksy mapowane na przestrzenie nazw mogą być używane w zapytaniach XPath. Oznacza to, że jeśli chcesz wykonać zapytanie względem przestrzeni nazw w dokumencie XML, nawet jeśli jest to domyślna przestrzeń nazw, musisz zdefiniować dla niego prefiks.

Na przykład bez definiowania prefiksu dla powyższego dokumentu XML zapytanie /books/book XPath nie zwróci żadnych wyników.

Prefiks musi być powiązany, aby zapobiec niejednoznaczności podczas wykonywania zapytań dotyczących dokumentów z niektórymi węzłami, a niektóre w domyślnej przestrzeni nazw.

Poniższy kod definiuje prefiks domyślnej przestrzeni nazw i wybiera wszystkie book elementy z http://www.contoso.com/books przestrzeni nazw.

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

Zobacz też