Vorgehensweise: Suchen nach Nachfolgern von untergeordneten Elementen (XPath-LINQ to XML) (C#)How to: Find Descendants of a Child Element (XPath-LINQ to XML) (C#)

In diesem Thema wird gezeigt, wie Sie die Nachfolgerelemente untergeordneter Elemente mit einem bestimmten Namen ermitteln können.This topic shows how to get the descendant elements of a child element with a particular name.

Der XPath-Ausdruck lautet:The XPath expression is:

./Paragraph//Text/text()

BeispielExample

Dieses Beispiel simuliert die Probleme beim Extrahieren von Text aus einer XML-Darstellung eines mit einem Textverarbeitungsprogramm erstellten Dokuments.This example simulates the problems of extracting text from an XML representation of a word processing document. Zunächst werden alle Paragraph-Elemente ausgewählt, dann erfolgt die Auswahl aller Text-Nachfolgerelemente des jeweiligen Paragraph-Elements.It first selects all Paragraph elements, and then it selects all Text descendant elements of each Paragraph element. Die Text-Nachfolgerelemente des untergeordneten Comment-Elements werden nicht ausgewählt.This doesn't select the descendant Text elements of the Comment element.

XElement root = XElement.Parse(  
@"<Root>  
  <Paragraph>  
    <Text>This is the start of</Text>  
  </Paragraph>  
  <Comment>  
    <Text>This comment is not part of the paragraph text.</Text>  
  </Comment>  
  <Paragraph>  
    <Annotation Emphasis='true'>  
      <Text> a sentence.</Text>  
    </Annotation>  
  </Paragraph>  
  <Paragraph>  
    <Text>  This is a second sentence.</Text>  
  </Paragraph>  
</Root>");  

// LINQ to XML query  
string str1 =  
    root  
    .Elements("Paragraph")  
    .Descendants("Text")  
    .Select(s => s.Value)  
    .Aggregate(  
        new StringBuilder(),  
        (s, i) => s.Append(i),  
        s => s.ToString()  
    );  

// XPath expression  
string str2 =  
    ((IEnumerable)root.XPathEvaluate("./Paragraph//Text/text()"))  
    .Cast<XText>()  
    .Select(s => s.Value)  
    .Aggregate(  
        new StringBuilder(),  
        (s, i) => s.Append(i),  
        s => s.ToString()  
    );  

if (str1 == str2)  
    Console.WriteLine("Results are identical");  
else  
    Console.WriteLine("Results differ");  
Console.WriteLine(str2);  

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

Results are identical  
This is the start of a sentence.  This is a second sentence.  

Siehe auchSee Also

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