none
Verschachtelte XML Datei mit Foreach durchlaufen RRS feed

  • Frage

  • Guten Morgen alle zusammen

    Ich möchte eine XML Datei welche "verschachtelt" ist(eine Quelle hat mehrere Ziele), mit einem Foreach durchlaufen. 

    Meine XML Datei sieht in gekürzter Version so aus:

    <?xml version="1.0" encoding="utf-8" ?>
    <Konfiguration>
    
      <Transporte>
        <Quelle>
          <QuelleTyp>ftp</QuelleTyp>
          <QuelleName>WebCam 01</QuelleName>
    
          <Ziele>
            <Ziel>
              <ZielTyp>Dateisystem</ZielTyp>
              <ZielName>Intranet t</ZielName>
            </Ziel>
    
            <Ziel>
              <ZielTyp>ftp</ZielTyp>
              <ZielName>Zentrale</ZielName>
            </Ziel>
    
            <Ziel>
              <ZielTyp>Mail</ZielTyp>
              <ZielName>Sicherheits-Scheff</ZielName>
            </Ziel>
    
          </Ziele>
        </Quelle>
    
        <Quelle>
          <QuelleTyp>ftp</QuelleTyp>
          <QuelleName>WebCam 02</QuelleName>
    
          <Ziele>
    
            <Ziel>
              <ZielTyp>Dateisystem</ZielTyp>
              <ZielName>Intranet Test c2</ZielName>
            </Ziel>
            
            <Ziel>
              <ZielTyp>FTP</ZielTyp>
              <ZielName>Langzeitarchiv</ZielName>
            </Ziel>
    
          </Ziele>
    
        </Quelle>
    
      </Transporte>
    
    </Konfiguration>
    

    Den Code welchen ich programmiert habe, schaut so aus:

            static void ZeigXMLStruktur()
            {
                foreach (XmlNode Quelle in doc.SelectNodes("/Konfiguration/Transporte/*"))
                {
                    Console.Write(Quelle.Name + " - ");
                    Console.Write( Quelle["QuelleName"].InnerText );
                    Console.Write( Environment.NewLine);
    
                    foreach (XmlNode Ziel in doc.SelectNodes("/Konfiguration/Transporte/Quelle/Ziele/*"))
                    {
                        Console.Write("   Ziel: ");
    Console.Write(Ziel["ZielName"].InnerText);
                        Console.Write(Environment.NewLine);
                    }
                }
            }

    Nun wird mir aber jedes Ziel aller Quellen durchlaufen und nicht nur die Ziele welche zu einer Quelle gehören.

    Was mache ich falsch?

    Vielen lieben Dank für eine Hilfestellung
    Gruss Sabrina

    Dienstag, 22. Oktober 2013 07:38

Antworten

  • Hallo Sabrina,

    starte bei der inneren Schleife mit der "Quelle", anstatt übers Dokument zu gehen.
    Wenn Du XmlElement (anstatt XmlNode) verwendest, steht dort auch die SelectNodes Methode zur Verfügung, greift hier aber auf die Kind-Elemente zu:

                    foreach (XmlElement Ziel in Quelle.SelectNodes("Ziele/*"))
                    {
                        Console.Write("   Ziel: ");
                        Console.Write(Ziel["ZielName"].InnerText);
                        Console.Write(Environment.NewLine);
                    }
    
    Gruß Elmar

    Dienstag, 22. Oktober 2013 09:27
    Beantworter

Alle Antworten

  • Hallo Sabrina,

    starte bei der inneren Schleife mit der "Quelle", anstatt übers Dokument zu gehen.
    Wenn Du XmlElement (anstatt XmlNode) verwendest, steht dort auch die SelectNodes Methode zur Verfügung, greift hier aber auf die Kind-Elemente zu:

                    foreach (XmlElement Ziel in Quelle.SelectNodes("Ziele/*"))
                    {
                        Console.Write("   Ziel: ");
                        Console.Write(Ziel["ZielName"].InnerText);
                        Console.Write(Environment.NewLine);
                    }
    
    Gruß Elmar

    Dienstag, 22. Oktober 2013 09:27
    Beantworter
  • Lieber Elmar

    Super vielen lieben Dank für Deine Antwort. Es passiert jetzt genau das, was ich erwartet habe. 

    Habe einen schönen Tag

    Viele Grüsse
    Sabrina

    Dienstag, 22. Oktober 2013 11:27