2016-12-13 4 views
0

Ich versuche, jedes childelement innerhalb der "Obst" Rankings Element zu schreiben. Wie der Code jetzt ist, geht es zum ersten Ranking-Element in meiner XML-Datei und gibt die Childelements innerhalb aus: Aber wie gehe ich namentlich zu "fruit" und schreibe seine Childlements aus?Xmlreader - Element nach Name abrufen und childelements C# webforms

Xml

<ranking name="Browers> 
<stat name="Chrome" /> 
<stat name="Firefox" /> 
<stat name="Safari" /> 
</ranking> 
<ranking name="Fruit> 
<stat name="Apple" /> 
<stat name="Orange" /> 
<stat name="Strawberry" /> 
</ranking> 

Codebehind

XmlReader reader =  XmlReader.Create(Server.MapPath("/temp/rankings.xml")); 

    while (true) 
    { 
     reader.ReadToFollowing("ranking"); 
     string name = reader.GetAttribute("name"); 

     if (name == "Fruit") 
     { 
      if (reader.ReadToDescendant("stat")) 
      { 
       do 
       { 
        litList.Text += reader.GetAttribute("name") + "<br />"; 
        litList.Text += reader.GetAttribute("percent") + "<br />"; 
        litList.Text += reader.GetAttribute("absolute") + "<br />"; 


       } while (reader.ReadToNextSibling("stat")); 
      } 

      break; 
     } 
    } 
+1

Was ist mit zwei Schleifen? Erstens für Rankings, zweitens für Statistiken? – Krzysztof

+0

Es hat funktioniert, ich dachte nicht klar. – Giefdonut

+1

Also, wenn es kein Ranking namens Obst gibt, dann wirst du eine Endlosschleife eingeben? Dieser Code, den du gepostet hast, wird * keuchen * funktionieren für deine ** sehr speziellen Bedürfnisse, aber das ist nicht wirklich der Weg dies zu tun. (Sag einfach, falls jemand anderes etwas Ähnliches braucht, wird er das nicht kopieren/einfügen) –

Antwort

1

Es ist wie dies geschehen könnte:

 if (reader.ReadToFollowing("ranking")) 
     { 
      do 
      { 
       Console.WriteLine("Ranking: " + reader.GetAttribute("name")); 
       if (reader.ReadToDescendant("stat")) 
       { 
        do 
        { 
         Console.WriteLine("Stat: " + reader.GetAttribute("name")); 
        } while (reader.ReadToNextSibling("stat")); 
       } 
      } while (reader.ReadToNextSibling("ranking")); 
     } 

Es kann einige Nachteile. Anstelle von XmlReader könnten Sie auch XDocument verwenden: https://msdn.microsoft.com/en-us/library/system.xml.linq.xdocument(v=vs.110).aspx