Gezielt Inhalt aus XML-Datei lesen

Die Programmiersprache C# und Programmierung im .NET Framework/Mono
Antworten
Lakustus
Beiträge: 2
Registriert: Do Apr 21, 2016 10:44 am

Gezielt Inhalt aus XML-Datei lesen

Beitrag von Lakustus » Do Apr 21, 2016 2:49 pm

Hallo liebe Programmierfreunde,

erklärt mir jemand bitte wie ich "gezielt" Inhalte aus eine XML Datei auslesen kann?


Folgendes Bsp.: Teil des Inhalts der Datei:

Code: Alles auswählen

XML-Code:
<applicationSettings>
    <programm.Properties.Settings>
        <setting name="UseIt" serializeAs="String">
            <value>True</value>
        </setting>
        <setting name="Silent" serializeAs="String">
            <value>False</value>
        </setting>
        <setting name="Trans" serializeAs="String">
            <value>True</value>
        </setting>
Hier möchte ich zB. auf das value-Attribut von Silent und Trans rankommen. Also einmal False und einmal True.


Bsp.:

Code: Alles auswählen

            XmlTextReader reader = null;
            reader = new XmlTextReader(PathToXML);
            while (reader.Read())
            {
                switch (reader.NodeType)
                {
                    case XmlNodeType.Text:
                        textBox1.Text += (reader.Value + "\n");
                        break;
                }
            }
Hiermit gibt er mir zumindest schonmal alle Inhalte aus aber ich weiss einfach nicht wie ich ihm sage "bitte nur den Inhalt der zum Trans bzw. Silent gehört auslesen".

Auch so Sachen wie:

Code: Alles auswählen

XmlDocument doc = new XmlDocument();
            doc.Load(PathToXML);

            XmlNode myNode= doc.SelectSingleNode("/setting[@name='Trans']");
            textBox1.Text = myNode.Attributes["value"].InnerText;
bringen kein Ergebnis. (NullException bei der Zuweisung an die TextBox)

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8485
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Gezielt Inhalt aus XML-Datei lesen

Beitrag von Xin » Fr Apr 22, 2016 9:04 am

Klingt so, als solltest Du erstmal testen, ob myNode überhaupt belegt ist.
Offenbar nicht. Also liefert die Anweisung doc.SelectSingleNode("/setting[@name='Trans']"); offenbar kein Ergebnis.
Sicher, dass das richtig ist?
Und dass das Dokument überhaupt ein Setting mit Namen 'Trans' enthält? (Sucht er z.B. rekursiv?)
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Lakustus
Beiträge: 2
Registriert: Do Apr 21, 2016 10:44 am

Re: Gezielt Inhalt aus XML-Datei lesen

Beitrag von Lakustus » Fr Apr 22, 2016 3:03 pm

Hallo Xin und vielen Dank für deine Antwort!

da bin ich jetzt auch überfragt, tschuldigung. Hab soviele verschiedene Sachen probiert bis der Kopf platzte hrhr.

Schlussendlich wurde das Problem durch folgenden Code gelöst:

Code: Alles auswählen

var ls = new List<string>(); //var statt List<String>
            ls.Add("Tag1");
            ls.Add("Tag2");
            ls.Add("Tag3");
            ls.Add("Tag4");
            ls.Add("Tag5");
            ls.Add("Bla");
            ls.Add("Blu");
            ls.Add("Silent");
            ls.Add("Trans");

            XmlDocument doc = new XmlDocument();
            doc.Load(PathToXML);
            XmlElement root = doc.DocumentElement;

            foreach (string b in ls)
            {
                textBox1.Text += GetValue(root, b);
                textBox1.Text += "\n";
            }

Jetzt versuche ich das in einem anderen Projekt umzusetzen (WinForms diesmal und Ergebnise in einer Listbox einzutragen), erhalte jedoch Compilerfehler beim "GetValue(root, b);

Code: Alles auswählen

XmlDocument doc = new XmlDocument();
                doc.Load(PathToXML);
                XmlElement root = doc.DocumentElement;

                foreach (string b in ls)
                {

                                if (b.Length > 20)
                                {
                                    lbSettings.Items.Add(b + ":\n" + GetValue(root, b));
                                }
wenn ich da unwissenheitshalber mal sowas versuche: lbSettings.Text += GetValue(root, b); meckert er ebenfalls beim GetValue.. wieso funktioniert das Ganze beim oberen Code bei einem wpf-Projekt, aber nicht hier bei WinForms :)

Antworten