[C#] XML-Datei parsen

Dieses Thema [C#] XML-Datei parsen im Forum ".NET Technology" wurde erstellt von haui95, 25. Jan. 2014.

Thema: [C#] XML-Datei parsen Guten Tag, ich möchte eine XML-Datei effizient und mit wenig Codezeilen parsen. Dabei sollen die Attribute der...

  1. Guten Tag,

    ich möchte eine XML-Datei effizient und mit wenig Codezeilen parsen. Dabei sollen die Attribute der Elemente in verschiedene Listen gespeichert werden. Diese Listen dienen als Parameter des Konstruktors der Klasse Spur. Am Ende jedes Elementes "spur" der XML-Datei soll die neu erstellte Spur zu einer Liste "spuren" hinzugefügt werden.

    [XML]
    <?xml version="1.0" encoding="UTF-8"?>
    <punkte>
    <spur>
    <punkt x="976.0" y="384.0"/>
    <punkt x="375.0" y="389.0"/>
    <punkt x="185.0" y="394.0"/>
    <punkt x="-20.0" y="399.0"/>
    <ampel id="1" pos="292" phase="6"/>
    </spur>
    <spur>
    <punkt x="976.0" y="325.0"/>
    <punkt x="575.0" y="300.0"/>
    <punkt x="535.0" y="-20.0"/>
    <ampel id="2" pos="292" phase="6"/>
    </spur>
    <spur>
    <punkt x="-20.0" y="536.0"/>
    <punkt x="250.0" y="531.0"/>
    <punkt x="500.0" y="531.0"/>
    <punkt x="976.0" y="520.0"/>
    <ampel id="3" pos="225" phase="6"/>
    </spur>
    <spur>
    <punkt x="-20.0" y="480.0"/>
    <punkt x="425.0" y="415.0"/>
    <punkt x="477.0" y="-20.0"/>
    <ampel id="4" pos="225" phase="6"/>
    </spur>
    <spur>
    <punkt x="400.0" y="-20.0"/>
    <punkt x="470.0" y="430.0"/>
    <punkt x="976.0" y="460.0"/>
    <ampel id="5" pos="218" phase="6"/>
    </spur>
    <spur>
    <punkt x="340.0" y="-20.0"/>
    <punkt x="310.0" y="300.0"/>
    <punkt x="-20.0" y="343.0"/>
    <ampel id="6" pos="218" phase="6"/>
    </spur>
    </punkte>
    [/XML]

    Bisher habe ich folgenden Code:

    Code (Java):

    XmlDocument doc = new XmlDocument();
                doc.LoadXml(xml);
                doc.Normalize();

                var elements = doc.GetElementsByTagName("spur");
                foreach (XmlElement spur in elements)
                {
                    List<float> xList = new List<float>();
                    List<float> yList = new List<float>();
                    List<int> id = new List<int>();
                    List<int> pos = new List<int>();

                    var points = spur.GetElementsByTagName("punkt");
                    var lights = spur.GetElementsByTagName("ampel");

                    foreach (XmlElement p in points)
                    {
                        xList.Add(float.Parse(p.GetAttribute("x")));
                        yList.Add(float.Parse(p.GetAttribute("y")));
                    }

                    foreach (XmlElement l in lights)
                    {
                        pos.Add(int.Parse(l.GetAttribute("pos")));
                        id.Add(int.Parse(l.GetAttribute("id")));
                    }

                    spuren.Add(new Spur(xList, yList, id, pos));
                }
     
    Gibt es eine Möglichkeit, das Auslesen der XML-Datei zu optimieren. Mit Linq bin ich auch nicht weiter gekommen. Obwohl der Code funktioniert, gefällt er mir jedoch nicht.

    Vielen Dank

    Hauke :)
     
  2. Vielleicht helfen dir diese Java-Grundlagen weiter --> *Klick*