Läs på engelska

Dela via


XPath-frågor och namnområden

XPath-frågor är medvetna om namnområden i ett XML-dokument och kan använda namnområdesprefix för att kvalificera element- och attributnamn. Kvalificerande element- och attributnamn med ett namnområdesprefix begränsar noderna som returneras av en XPath-fråga till endast de noder som tillhör ett specifikt namnområde.

Om prefixet books till exempel mappar till namnområdet http://www.contoso.com/booksväljer följande XPath-fråga /books:books/books:book endast de book elementen i namnområdet http://www.contoso.com/books.

The XmlNamespaceManager

Om du vill använda namnområden i en XPath-fråga skapas ett objekt som härleds från IXmlNamespaceResolver gränssnittet som XmlNamespaceManager klassen med namnområdes-URI:n och prefixet som ska inkluderas i XPath-frågan.

Objektet XmlNamespaceManager kan användas i frågan på vart och ett av följande sätt.

Följande är metoderna för klassen XPathNavigator som accepterar ett objekt som härleds från IXmlNamespaceResolver gränssnittet som en parameter.

Standardnamnområdet

I DET XML-dokument som följer används standardnamnområdet med ett tomt prefix för att deklarera http://www.contoso.com/books namnområdet.

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

XPath behandlar det tomma prefixet null som namnområdet. Med andra ord kan endast prefix som mappas till namnområden användas i XPath-frågor. Det innebär att om du vill fråga mot ett namnområde i ett XML-dokument, även om det är standardnamnområdet, måste du definiera ett prefix för det.

Om du till exempel inte definierar ett prefix för XML-dokumentet ovan returnerar XPath-frågan /books/book inga resultat.

Ett prefix måste vara bundet för att förhindra tvetydighet när du kör frågor mot dokument med vissa noder som inte finns i ett namnområde och vissa i ett standardnamnområde.

Följande kod definierar ett prefix för standardnamnområdet och markerar alla book element från http://www.contoso.com/books namnområdet.

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

Se även