2009-08-03 8 views
7

Mit diesem Code kann ich den Titel aus der folgenden XML-Datei erhalten:Wie kann ich das erste Element nach einem Element mit LINQ-to-XML erhalten?

var xml = XElement.Load (@"C:\\test\\smartForm-customersMain.xml"); 
string title = xml.Element("title").Value; 

Aber wie ich es genau mehr machen, z.B. „Holen Sie sich die erste Element nach dem Smart Element, zum Beispiel so etwas wie dieses:

//PSEUDO-CODE: 
string title = xml.Element("smartForm").FirstChild("title"); 

Die XML:

<?xml version="1.0" encoding="utf-8" ?> 
<smartForm idCode="customersMain"> 
    <title>Customers Main222</title> 
    <description>Generic customer form.</description> 
    <area idCode="generalData" title="General Data"> 
     <column> 
      <group> 
       <field idCode="anrede"> 
        <label>Anrede</label> 
       </field> 
       <field idCode="firstName"> 
        <label>First Name</label> 
       </field> 
       <field idCode="lastName"> 
        <label>Last Name</label> 
       </field> 
      </group> 
     </column> 
    </area> 
    <area idCode="address" title="Address"> 
     <column> 
      <group> 
       <field idCode="street"> 
        <label>Street</label> 
       </field> 
       <field idCode="location"> 
        <label>Location</label> 
       </field> 
       <field idCode="zipCode"> 
        <label>Zip Code</label> 
       </field> 
      </group> 
     </column> 
    </area> 
</smartForm> 

Antwort

3

Sie wollen die Descendants Achse Methode verwenden, und rufen Sie anschließend die FirstOrDefault Erweiterungsmethode erhält das erste Element

Hier ist ein einfaches Beispiel:.

using System; 
using System.Linq; 
using System.Xml.Linq; 

class Program 
{ 
    static void Main() 
    { 
     String xml = @"<?xml version=""1.0"" encoding=""utf-8"" ?> 
      <smartForm idCode=""customersMain""> 
       <title>Customers Main222</title> 
       <description>Generic customer form.</description> 
       <area idCode=""generalData"" title=""General Data""> 
       <column> 
        <group> 
        <field idCode=""anrede""> 
         <label>Anrede</label> 
        </field> 
        <field idCode=""firstName""> 
         <label>First Name</label> 
        </field> 
        <field idCode=""lastName""> 
         <label>Last Name</label> 
        </field> 
        </group> 
       </column> 
       </area> 
       <area idCode=""address"" title=""Address""> 
       <column> 
        <group> 
        <field idCode=""street""> 
         <label>Street</label> 
        </field> 
        <field idCode=""location""> 
         <label>Location</label> 
        </field> 
        <field idCode=""zipCode""> 
         <label>Zip Code</label> 
        </field> 
        </group> 
       </column> 
       </area> 
      </smartForm>"; 

     XElement element = XElement.Parse(xml) 
      .Descendants() 
      .FirstOrDefault(); 
    } 
} 
5

Um etwas zu Andrew Antwort hinzufügen, wenn Sie nicht wissen, ob smartForm das Element root ist aber immer noch wollen, der Titeltext der ersten solchen Eintrag verwenden Sie:

xml.DescendantsAndSelf("smartForm").Descendants("title").First().Value; 

Diese erfordert, dass es eine sein smartForm-Element mit einem Titelelement irgendwo darin.

xml.DescendantsAndSelf("smartForm").Elements("title").First().Value; 

Wenn Sie nicht egal, was der Name title war und wollte nur die erste Unter: Sie konnte verwenden

Wenn Sie, dass der Titel Element war ein sofort Kind in smartForm, um sicherzustellen, wollte Element dann würden Sie verwenden:

xml.DescendantsAndSelf("smartForm").Elements().First().Value; 
+0

gute Erklärung. e.Elements (Name) .First() ist was ich brauche. –

0

Meine Aufgabe war das erste Kind des angegebenen Namens zu finden. Wenn xml verwendet Namespaces, als statt

e.Elements(name).FirstOrDefault() 

schreiben

e.Elements().FirstOrDefault(i => i.Name.LocalName == name) 
Verwandte Themen