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.
Obiekt XmlNamespaceManager jest skojarzony z istniejącym XPathExpression obiektem przy użyciu SetContext metody XPathExpression obiektu. Można również skompilować nowy XPathExpression obiekt przy użyciu metody statycznej Compile , która przyjmuje ciąg reprezentujący wyrażenie XPath i XmlNamespaceManager obiekt jako parametry i zwraca nowy XPathExpression obiekt.
Sam XmlNamespaceManager obiekt jest przekazywany jako parametr do metody klasy akceptującej XPathNavigator wraz z ciągiem reprezentującym wyrażenie XPath.
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ż
- XmlDocument
- XPathDocument
- XPathNavigator
- Przetwarzanie danych XML przy użyciu modelu danych XPath
- Wybieranie danych XML przy użyciu klasy XPathNavigator
- Obliczanie wyrażeń XPath przy użyciu klasy XPathNavigator
- Dopasowywanie węzłów przy użyciu klasy XPathNavigator
- Typy węzłów rozpoznawanych w zapytaniach XPath
- Skompilowane wyrażenia XPath