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 odwołuje się do przestrzeni nazw http://www.contoso.com/books, następujące zapytanie XPath /books:books/books:book wybiera tylko te elementy book w przestrzeni nazw http://www.contoso.com/books.

The XmlNamespaceManager

Aby używać przestrzeni nazw w zapytaniu XPath, obiekt pochodzący z takiej klasy, jak IXmlNamespaceResolver, implementującej interfejs XmlNamespaceManager, jest konstruowany przy użyciu identyfikatora URI przestrzeni nazw i prefiksu, aby uwzględnić je 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 przestrzeni nazw 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 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ć związany, aby zapobiec niejednoznaczności podczas wykonywania zapytań na dokumentach, które zawierają węzły bez przestrzeni nazw oraz 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 także