Laden...

XML auslesen mit "foreach"

Erstellt von oliver1979 vor 14 Jahren Letzter Beitrag vor 14 Jahren 1.858 Views
O
oliver1979 Themenstarter:in
77 Beiträge seit 2009
vor 14 Jahren
XML auslesen mit "foreach"

Hallo Zusammen,

ich möchte eine XML Datei auslesen (das Schreiben klappt super)

So sieht die XML Datei aus:

<DK-pro>

  • <Save1>
    <Date-Time>leer</Date-Time>
    <HV1>leer</HV1>
    <HV2>leer</HV2>
    <Count>leer</Count>
    <Count>leer</Count>
    <Count>leer</Count>
    <Count>leer</Count>
    <Count>leer</Count>
    <Count>leer</Count>
    <Count>leer</Count>
    <Count>leer</Count>
    <Count>leer</Count>
    <Count>leer</Count>

"DK-pro" ist der oberste Knoten, danach kommt "Save1" und die Werte "Date-Time", "HV1", "HV2" sind Childs davon.

Die Werte in Date-Time, HV1 und HV2 kann ich auslesen, jedoch habe ich 514 x den Wert Count.

Wie müsste denn die Foreach Schleife aussehen um die ganzen "Count" in eine Listbox zu schreiben ?

Danke für die Hilfe
Oliver

6.862 Beiträge seit 2003
vor 14 Jahren

Hallo,

was verwendest du denn überhaupt zum lesen des XMLs? Da gibts ja mittlerweile viele Möglichkeiten in .Net.

Allgemein würd ich aber entweder ne while Schleife machen und solange lesen bis kein Count Tag mehr kommt, oder ne for Schleife wenn du dir sicher bist dass das Element immer 514 auftaucht. Bei foreach brauchst du ja schon ne Collection über die du iterieren kannst, das hast du ja aber noch gar nicht wenn du die Daten aus der XML ausliest.

Baka wa shinanakya naoranai.

Mein XING Profil.

O
oliver1979 Themenstarter:in
77 Beiträge seit 2009
vor 14 Jahren

Mit C# lese ich das ganze aus.

Wenn ich eine For-Schleife mache, wie sag ich dann das er im XML eine Zeile weiter springt ?

Es gibt insgesamt "Save 1-5" und jedes enthält 3 Einzelwerte und 514 "count" Werte

343 Beiträge seit 2007
vor 14 Jahren

Hallo oliver1979,

In so einem Fall wie deinem benutze ich immer folgende Funktionen:

zum Öffnen/Laden des XML-Dokumentes:


XmlDocument xmldoc = new XmlDocument();
xmldoc.Load(file);

Einzelne Knoten hole ich z.B. über SelectSingleNode


XmlNode root = xmldoc.SelectSingleNode("containers");

Und mehrere Knoten mit SelectNodes


XmlNode dk_pro = xmldoc.SelectSingleNode("DK-pro");
XmlNode root = xmldoc.SelectSingleNode("Save1");
foreach (XmlNode count in root.SelectNodes("Count"))
{
  //Zugriff auf Attribute
  count.Attributes[attribut_name].Value
  //Zugirff auf Inhalt (als String)
  count.InnerText
}

Gruß
Preli

[- www.saftware.net -](http://www.saftware.net/)
6.862 Beiträge seit 2003
vor 14 Jahren

Mit C# lese ich das ganze aus. Nicht ganz die Antwort die ich erwartet habe 😁

preli hat ja nen Beispiel mit dem XmlDocument gezeigt, dann gibts aber mindestens noch XmlReader und Linq to XML. Darauf zielte meine Frage hinaus, weil sich die Ansätze ja doch sehr unterscheiden.

Baka wa shinanakya naoranai.

Mein XING Profil.

O
oliver1979 Themenstarter:in
77 Beiträge seit 2009
vor 14 Jahren

So sieht meine Funktion nun aus, aber es kommen da einige Fehlermeldungen (Objektverweis stimmt nicht usw.)

private void read_medialist2()
        {
            XmlDocument doc = new XmlDocument();
            doc.Load(@return_startuppath_xml2());

            XmlElement root = doc.DocumentElement["Save1"];
            listBox_ebene1_spektrum_save1.Items.Add(root.SelectSingleNode("Date-Time").InnerText);
            listBox_ebene1_spektrum_save1.Items.Add(root.SelectSingleNode("HV1").InnerText);
            listBox_ebene1_spektrum_save1.Items.Add(root.SelectSingleNode("HV2").InnerText);
            foreach (XmlNode Save1 in root.SelectNodes("Count"))
            {
                listBox_ebene1_spektrum_save1.Items.Add(@Save1.Attributes["Count"].InnerText);
            }
        }
6.862 Beiträge seit 2003
vor 14 Jahren

[Hinweis] Wie poste ich richtig? Punkt 5 bitte beachten.

(Objektverweis stimmt nicht usw.) Wenn du damit ne NullReferenceException meinst dann siehe hier: [FAQ] NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt

Baka wa shinanakya naoranai.

Mein XING Profil.

343 Beiträge seit 2007
vor 14 Jahren

Hallo oliver1979,
überleg mal genau was deine Zeile in der foreach Schleife macht und was ein XML-Attribut ist:


listBox_ebene1_spektrum_save1.Items.Add(@Save1.Attributes["Count"].InnerText);

Save1 ist bereits dein Count. Du brauchst nicht mit Attributen machen wenn du keine hast. Ein Attribut würde so aussehen:


<Count eigenschaft1="wert1">leer</Count> 

Deine Zeile müsste eher in etwa so aussehen:


listBox_ebene1_spektrum_save1.Items.Add(Save1.InnerText);

Gruß
Preli

[- www.saftware.net -](http://www.saftware.net/)
O
oliver1979 Themenstarter:in
77 Beiträge seit 2009
vor 14 Jahren

Absolut Klasse preli !

Vielen Dank, jetzt gehts.

LG
Oliver1979

343 Beiträge seit 2007
vor 14 Jahren

Kein Problem,
ich hoff du hast auch was gelernt dabei und nicht nur den Code kopiert 😉

Liebe Grüße
Preli

[- www.saftware.net -](http://www.saftware.net/)