Vorgehensweise: Filtern nach einem optionalen Element (C#)How to: Filter on an Optional Element (C#)

Es kann vorkommen, dass Sie nach einem Element filtern möchten, ohne genau zu wissen, ob dieses Element in Ihrem XML-Dokument tatsächlich existiert.Sometimes you want to filter for an element even though you are not sure it exists in your XML document. Die Suche sollte dann so ausgeführt werden, dass für den Fall, dass das Element das gesuchte untergeordnete Element nicht besitzt, beim Filtern keine Ausnahme wegen eines NULL-Verweises ausgelöst wird.The search should be executed so that if the particular element does not have the child element, you do not trigger a null reference exception by filtering for it. Im folgenden Beispiel besitzt das Child5-Element kein untergeordnetes Type-Element, dennoch wird die Abfrage korrekt ausgeführt.In the following example, the Child5 element does not have a Type child element, but the query still executes correctly.

BeispielExample

Dieses Beispiel verwendet die Elements-Erweiterungsmethode:This example uses the Elements extension method.

XElement root = XElement.Parse(@"<Root>  
  <Child1>  
    <Text>Child One Text</Text>  
    <Type Value=""Yes""/>  
  </Child1>  
  <Child2>  
    <Text>Child Two Text</Text>  
    <Type Value=""Yes""/>  
  </Child2>  
  <Child3>  
    <Text>Child Three Text</Text>  
    <Type Value=""No""/>  
  </Child3>  
  <Child4>  
    <Text>Child Four Text</Text>  
    <Type Value=""Yes""/>  
  </Child4>  
  <Child5>  
    <Text>Child Five Text</Text>  
  </Child5>  
</Root>");  
var cList =  
    from typeElement in root.Elements().Elements("Type")  
    where (string)typeElement.Attribute("Value") == "Yes"  
    select (string)typeElement.Parent.Element("Text");  
foreach(string str in cList)  
    Console.WriteLine(str);  

Dieser Code erzeugt die folgende Ausgabe:This code produces the following output:

Child One Text  
Child Two Text  
Child Four Text  

BeispielExample

Im folgenden Beispiel wird dieselbe Abfrage für XML in einem Namespace gezeigt.The following example shows the same query for XML that is in a namespace. Weitere Informationen finden Sie unter Working with XML Namespaces (C#) (Arbeiten mit XML-Namespaces (C#)).For more information, see Working with XML Namespaces (C#).

XElement root = XElement.Parse(@"<Root xmlns='http://www.adatum.com'>  
  <Child1>  
    <Text>Child One Text</Text>  
    <Type Value=""Yes""/>  
  </Child1>  
  <Child2>  
    <Text>Child Two Text</Text>  
    <Type Value=""Yes""/>  
  </Child2>  
  <Child3>  
    <Text>Child Three Text</Text>  
    <Type Value=""No""/>  
  </Child3>  
  <Child4>  
    <Text>Child Four Text</Text>  
    <Type Value=""Yes""/>  
  </Child4>  
  <Child5>  
    <Text>Child Five Text</Text>  
  </Child5>  
</Root>");  
XNamespace ad = "http://www.adatum.com";  
var cList =  
    from typeElement in root.Elements().Elements(ad + "Type")  
    where (string)typeElement.Attribute("Value") == "Yes"  
    select (string)typeElement.Parent.Element(ad + "Text");  
foreach (string str in cList)  
    Console.WriteLine(str);  

Dieser Code erzeugt die folgende Ausgabe:This code produces the following output:

Child One Text  
Child Two Text  
Child Four Text  

Siehe auchSee Also

XElement.Attribute
XContainer.Elements
Extensions.Elements
Basic Queries (LINQ to XML) (C#) (Standardabfragen (LINQ to XML) (C#))Basic Queries (LINQ to XML) (C#)
Standard Query Operators Overview (C#) (Übersicht der Standardabfrageoperatoren (C#))Standard Query Operators Overview (C#)
Projection Operations (C#) (Projektionsvorgänge (C#))Projection Operations (C#)