none
Jede XML Node aus einem Attribut auslesen RRS feed

  • Frage

  • Hallo,

    Ich habe derzeit folgendes Problem: Ich habe ein XML Dokument welches wie folgt aufgebaut ist:

    <Datas>
    <TimingPoints>
    <Point1>9:8:7:6</Point1>
    <Point2>1:2:3:4</Point2>
    <Point3>4:5:6:7</Point3>
    </TimingPoints>
    </Datas>

    Ich möchte nun jeden Point auslesen. Mir ist klar damit das ganze mit einer foreach-Schleife möglich wäre, jedoch ist zu erwähnen, das dies bei weitem nicht die ganze XML Datei ist, dh Es gibt weitere Attribute neben <TimingPoints></TimingPoints>.

    Ebenfalls kann die Anzahl der Points verschieden sein wodurch eine Zählschleife ebenfalls nicht möglich ist. 

    Ich wäre sehr dankbar über einen Lösungsvorschlag

    Mit freundlichen Grüßen

    Markus Ö.

    Freitag, 5. September 2014 21:48

Antworten

  • Hallo,
    ich empfehle dir das Dokument mittels LINQ to XML auszulesen. Damit kannst du einfach eine Liste aller Points erzeugen lassen:

    var file = @"D:\Test\XMLFile1.xml";
    var points = XDocument.Load(file)//Datei laden
        .Root //Root-Knoten "Datas" öffnen
        .Element("TimingPoints")//TimingPoint finden, beachte dass das Erste genommen wird
        .Elements()//Innere Elemente auslesen
        .Select(x => x.Value);//Jeweils den Wert des Point* auslesen
    foreach (var point in points)//Alle Punkte durch gehen
        Console.WriteLine(point);

    Dasbei gehe ich davon aus, das Datas der Root-Knoten des Dokuments ist. Weiterhin soll immer der erste Knoten "TimingPoints" ausgelesen werden. Die Liste enthält die Punkte dann in der Reihenfolge, wie sie im Dokument enthalten sind.

    Wenn du das Select-Statement leicht abänderst, kannst du zu jedem Punkt noch den Namen des Knotens erhalten:

    .Select(x => new KeyValuePair<string, string>(x.Name.ToString(), x.Value));

    Von jedem "point" ist dann die Key-Eigenschaft der Tagname und die Value-Eigenschaft der enthaltene Wert.

    LINQ to XML erzeugt immer ein IEnumerable<T> als Ergebnis. Mittels den Erweiterungsmethoden ToArray und ToList kannst du dir auch ein Array oder eine List<T> erzeugen lassen.

    Siehe auch: LINQ to XML


    Tom Lambert - C# MVP
    Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    • Als Antwort markiert Bashesz Sonntag, 7. September 2014 01:22
    Freitag, 5. September 2014 22:13
    Moderator