Vorgehensweise: Suchen nach Elementen in einem Namespace (XPath-LINQ to XML) (C#)How to: Find Elements in a Namespace (XPath-LINQ to XML) (C#)

XPath-Ausdrücke können nach Knoten in einem bestimmten Namespace suchen.XPath expressions can find nodes in a particular namespace. Zum Angeben der Namespaces werden Namespacepräfixe verwendet.XPath expressions use namespace prefixes for specifying namespaces. Wenn Sie einen XPath-Ausdruck, der Namespacepräfixe enthält, analysieren möchten, müssen Sie den XPath-Methoden ein Objekt übergeben, das IXmlNamespaceResolver implementiert.To parse an XPath expression that contains namespace prefixes, you must pass an object to the XPath methods that implements IXmlNamespaceResolver. In diesem Beispiel wird XmlNamespaceManager verwendet.This example uses XmlNamespaceManager.

Der XPath-Ausdruck lautet:The XPath expression is:

./aw:*

BeispielExample

Das folgende Beispiel liest eine XML-Struktur, die zwei Namespaces enthält.The following example reads an XML tree that contains two namespaces. Zum Lesen des XML-Dokuments kommt dabei ein XmlReader zum Einsatz.It uses an XmlReader to read the XML document. Anschließend werden eine XmlNameTable aus dem XmlReader und ein XmlNamespaceManager aus der XmlNameTable abgerufen.It then gets an XmlNameTable from the XmlReader, and an XmlNamespaceManager from the XmlNameTable. Beim Auswählen von Elementen wird der XmlNamespaceManager verwendet.It uses the XmlNamespaceManager when selecting elements.

XmlReader reader = XmlReader.Create("ConsolidatedPurchaseOrders.xml");  
XElement root = XElement.Load(reader);  
XmlNameTable nameTable = reader.NameTable;  
XmlNamespaceManager namespaceManager = new XmlNamespaceManager(nameTable);  
namespaceManager.AddNamespace("aw", "http://www.adventure-works.com");  
IEnumerable<XElement> list1 = root.XPathSelectElements("./aw:*", namespaceManager);  
IEnumerable<XElement> list2 =  
    from el in root.Elements()  
    where el.Name.Namespace == "http://www.adventure-works.com"  
    select el;  
if (list1.Count() == list2.Count() &&  
        list1.Intersect(list2).Count() == list1.Count())  
    Console.WriteLine("Results are identical");  
else  
    Console.WriteLine("Results differ");  
foreach (XElement el in list2)  
    Console.WriteLine(el);  

Dieses Beispiel erzeugt die folgende Ausgabe:This example produces the following output:

Results are identical  
<aw:PurchaseOrder PONumber="11223" Date="2000-01-15" xmlns:aw="http://www.adventure-works.com">  
    <aw:ShippingAddress>  
      <aw:Name>Chris Preston</aw:Name>  
      <aw:Street>123 Main St.</aw:Street>  
      <aw:City>Seattle</aw:City>  
      <aw:State>WA</aw:State>  
      <aw:Zip>98113</aw:Zip>  
      <aw:Country>USA</aw:Country>  
    </aw:ShippingAddress>  
    <aw:BillingAddress>  
      <aw:Name>Chris Preston</aw:Name>  
      <aw:Street>123 Main St.</aw:Street>  
      <aw:City>Seattle</aw:City>  
      <aw:State>WA</aw:State>  
      <aw:Zip>98113</aw:Zip>  
      <aw:Country>USA</aw:Country>  
    </aw:BillingAddress>  
    <aw:DeliveryInstructions>Ship only complete order.</aw:DeliveryInstructions>  
    <aw:Item PartNum="LIT-01">  
      <aw:ProductID>Litware Networking Card</aw:ProductID>  
      <aw:Qty>1</aw:Qty>  
      <aw:Price>20.99</aw:Price>  
    </aw:Item>  
    <aw:Item PartNum="LIT-25">  
      <aw:ProductID>Litware 17in LCD Monitor</aw:ProductID>  
      <aw:Qty>1</aw:Qty>  
      <aw:Price>199.99</aw:Price>  
    </aw:Item>  
  </aw:PurchaseOrder>  

Siehe auchSee Also

LINQ to XML für XPath-Benutzer (C#)LINQ to XML for XPath Users (C#)