C# XML mehrmals auslesen


krrrambambuli

Grünschnabel
Hallo!
Ich habe eine sehr große XML Datei aus der ich verschiedene Informationen erhalten möchte.
Z.B., möchte ich es hinbekommen, alle Texte die vorher mit "id="2113564"" gekennzeichnet sind, in der Console auszugeben. Bisher schaffe ich das auch, allerdings nur mit dem ersten Element dieser Art.
Nachdem "schalter2" ausgegeben wurde, wird nicht weiter gesucht.
Das hat wohl was mit dem reader zu tun, der dann nicht weiter macht. Hat da jemand eine Lösung ;) ?

Ausschnitt aus der XML Datei:
Code:
<?xml version="1.0" encoding="utf-8" ?> 
<meinXML>
.....
                    <array id="2113564">
                <System.Array.Int32>
                </System.Array.Int32>
              </array>
                    <string>schalter2</string>
              <uint32>2</uint32>
              <int32>1</int32>

              <array id="2113564">
                <System.Array.Int32>
                </System.Array.Int32>
              </array>
              <string>schalter1</string>
              <uint32>1</uint32>
              <int32>1</int32>
.....
</meinXML>

Programme:
Code:
namespace XML_auslesen
{
    class Program
    {
        static void Main(string[] args)
        {


            XmlReader reader;
            reader = XmlReader.Create(@"D:\Macke\Testprogramme\TIA\System\tia-export2.xml");
            List<Gegenstand> liste = new List<Gegenstand>();
            Gegenstand Teil = null;

            // AUF ELEMENTE ( "id=2113564" ) untersuchen
            while (reader.Read())
            {
                if (reader.NodeType == (XmlNodeType.Element))
                {
                    Console.WriteLine("--> Element gefunden");
                    Console.WriteLine(reader.Value.ToString());
                    string buffer2;
                    buffer2 = reader.ReadInnerXml();
                    string id = "id=\"2113564\"";

                    if (buffer2.Contains(id))
                    {
                        Console.WriteLine("Wichtiges Objekt");
                        Console.WriteLine(buffer2.ToString());
                    }
                }
            }
        }
...
 

Improof

Erfahrenes Mitglied
Hey,

also so wie ich das jetz mal überflogen hab, sollte es eigentlich funktionieren (habs aber nicht getestet!).
Was passiert denn genau, nachdem "schalter2" ausgegeben wird? Bricht die Schleife unerwartet ab oder kriegst ne Fehlermeldung??

Versuch mal das Programm zu debuggen oder gib dir testweise mal deinen String "buffer2" immer aus. Eventuell hast du da noch ein Problem mit deiner XML und der buffer enthält beide Elemente mit der id "2113564"...dann würde es auch nur eine Ausgabe geben...aber so genau kann ich das natürlich jetzt nicht beurteilen, ist nur ne Idee.

Gruß
Daniel
 

krrrambambuli

Grünschnabel
Hab's nochmal versucht. Hatte irgendwo nen Fehler.... jetzt geht's auf jeden Fall.
Die Ausgabe in der Console sieht so aus:
Code:
                  <array id="2113564">
              <System.Array.Int32>
                </System.Array.Int32>
              </array>
                    <string>schalter2</string>
              <uint32>2</uint32>
              <int32>1</int32>


              <array id="2113564">
                <System.Array.Int32>
                </System.Array.Int32>
              </array>
              <string>schalter1</string>
              <uint32>1</uint32>
              <int32>1</int32>

Jetzt bleibt nur die Frage, wie ich nur die Texte in Zeile 6 & 15auslese und in die Console schreibe !?
 

Improof

Erfahrenes Mitglied
Ich hab bisher noch nie eine XML in C# ausgelesen (bin da mehr in der Java-Welt, arbeitsbedingt...finde C# eigentlich besser :D), aber du kannst doch sicher bei deinem gefundenen Node nicht nur den Text mit "ReadInnerXml()" auslesen, sondern auch alle Children-Nodes als Array holen. Dann könntest du das Array durchlaufen und wenn das immer gleich aufgebaut ist, nach dem Tag mit dem Namen "string" suchen (also z.B. <string>...</string>). Und das kanst du dann ja wieder auslesen mit deiner read Methode.