Läs på engelska

Dela via


Navigering i XPath-namnområde

Om du vill använda XPath-frågor med XML-dokument måste du korrekt adressera XML-namnområden och de element som ingår i namnområden. Namnområden förhindrar tvetydigheter som kan uppstå när namn används i mer än en kontext. Namnet ID kan till exempel referera till mer än en identifierare som är associerad med olika element i ett XML-dokument. Namnområdessyntaxen anger URI:er, namn och prefix som särskiljer elementen i ett XML-dokument.

Exemplet i det här avsnittet visar hur prefix används för att navigera i ett XML-dokument med XPathNavigator. Mer information om namnområden och syntax finns i XML-filer: Förstå XML-namnområden.

Namnområdesdeklarationer

Namnområdesdeklarationer gör elementen i ett XML-dokument åtskiljbara och adresserbara när du använder en instans av XPathNavigator. Namnområdesprefix ger en kort syntax för adressering av namnområden.

Prefix definieras av formuläret: <e:Envelope xmlns:e=http://schemas.xmlsoap.org/soap/envelope/>. I den här syntaxen är prefixet "e" en förkortning av namnområdets formella URI. Du kan identifiera elementet Body som medlem i Envelope namnområdet med hjälp av syntaxen: e:Body.

Följande XML-dokument refereras som response.xml i navigeringsexemplet i nästa avsnitt.

XML
<?xml version="1.0" encoding="utf-8" ?>  
<e:Envelope xmlns:e="http://schemas.xmlsoap.org/soap/envelope/">  
  <e:Body>  
    <s:Search xmlns:s="http://schemas.microsoft.com/v1/Search">  
      <r:request xmlns:r="http://schemas.microsoft.com/v1/Search/metadata"
                 xmlns:i="http://www.w3.org/2001/XMLSchema-instance">  
      </r:request>  
    </s:Search>  
  </e:Body>  
</e:Envelope>  

Koden i det här avsnittet använder XPathNavigator och XmlNamespaceManager objekt för att välja elementet Search från XML-dokumentet i föregående avsnitt. Frågan xpath innehåller namnområdesprefix för varje element i sökvägen. Om du anger den exakta identiteten för de namnområden som innehåller varje element garanteras korrekt navigering till elementet Search med SelectSingleNode metoden .

C#
using (XmlReader reader = XmlReader.Create("response.xml"))  
{  
    XPathDocument doc = new XPathDocument(reader);  
    XPathNavigator nav = doc.CreateNavigator();
  
    XmlNamespaceManager nsmgr = new XmlNamespaceManager(nav.NameTable);  
    nsmgr.AddNamespace("e", @"http://schemas.xmlsoap.org/soap/envelope/");  
    nsmgr.AddNamespace("s", @"http://schemas.microsoft.com/v1/Search");  
    nsmgr.AddNamespace("r", @"http://schemas.microsoft.com/v1/Search/metadata");  
    nsmgr.AddNamespace("i", @"http://www.w3.org/2001/XMLSchema-instance");  
  
    string xpath = "/e:Envelope/e:Body/s:Search";  
  
    XPathNavigator element = nav.SelectSingleNode(xpath, nsmgr);  
  
    Console.WriteLine("Element Prefix:" + element.Prefix +
    " Local name:" + element.LocalName);  
    Console.WriteLine("Namespace URI: " + element.NamespaceURI);  
}  

Precisionen för fullständigt kvalificerade namnområden och namn är mer än en bekvämlighet. En liten experimentering med dokumentdefinitionen och koden i föregående exempel verifierar att navigering utan fullständigt kvalificerade elementnamn genererar undantag. Till exempel returnerar elementdefinitionen: <Search xmlns="http://schemas.microsoft.com/v1/Search">, och fråga: sträng xpath = "/s:Envelope/s:Body/Search"; utan namnområdesprefixet på elementet Search i stället för elementetSearch.null

Se även