2016-12-13 5 views
0

"fruit"ランキング要素内のすべてのchildelementを書き出しようとしています。コードは今のように、xmlファイルの最初の要素に移動し、childelementsを出力します。しかし、どのように名前で "果物"に行き、子要素を書き出すのですか?Xmlreader - 名前で要素を取得し、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> 

分離コード

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

2つのループはどうですか?ランキングの第1位、統計第2位? – Krzysztof

+0

それは働いた、明らかに考えていなかった。 – Giefdonut

+1

したがって、果物と呼ばれるランクがない場合、無限ループに入るでしょうか?あなたが掲示したこのコードは**あなたの非常に**特定のニーズのために働くでしょうが、これは本当にこれを行う方法ではありません。 (ちょうど他の誰かが同様のものを必要とする場合は、コピー/貼り付けはしません) –

答えて

1

それはこのように行うことができる:

 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")); 
     } 

それはいくつかの欠点を有することができます。 XmlReaderの代わりにXDocumentを使用することもできます:https://msdn.microsoft.com/en-us/library/system.xml.linq.xdocument(v=vs.110).aspx

関連する問題