2012-01-18 24 views
0

これは比較的簡単だと確信しています。私は以下のXMLをループしたい、私は新しい名前空間を打つたびにvarをリセットする。各ループでxmlをリセットするループを繰り返す

XmlNodeList nodes = reports.SelectNodes("Reports/namespace"); 
     foreach (XmlNode NSpace in nodes) 
     { 
      List<string> newlist = new List<string>(); 

      //loop through checks one by one. 
      foreach (XmlElement element in reports.GetElementsByTagName("report")) 
      { 
       doStuff 
      } 
     } 

それは単に起因以下に(各名前空間の)全体のXMLブロックを介して4回ループしているように、これは間違っている知っています。

foreach (XmlElement element in reports.GetElementsByTagName("report")) 

誰かが必要とするxpathまたは正しいループをアドバイスできますか?

XML

<Reports> 
    <namespace Type="first"> 
    <report> 
    <name>first_1</name> 
    </report> 
    <report> 
    <name>first_2</name> 
    </report> 
    <report> 
    <name>first_3</name> 
    </report> 
    </namespace> 
    <namespace Type="Second"> 
    <report> 
    <name>Second_1</name> 
    </report> 
    </namespace> 
    <namespace Type="Third"> 
    <report> 
    <name>Third_1</name> 
    </report> 
    </namespace> 
    <namespace Type="Fourth"> 
    <report> 
    <name>Fourth_1</name> 
    </report> 
    </namespace> 
    </Reports> 

答えて

1

さて、あなたの外側の反復変数を無視しています。あるいは、

XmlElement namespaceElement = (XmlElement) NSpace; 
foreach (XmlElement element in namespaceElement.GetElementsByTagName("report")) 
{ 
    // doStuff 
} 

もあなたの反復変数の種類を変更します:私はあなただけにあなたの内側のループを変更したい疑う

foreach (XmlElement NSpace in nodes) 
{ 
    List<string> newlist = new List<string>(); 

    foreach (XmlElement element in NSpace.GetElementsByTagName("report")) 
    { 
     // ... 
    } 
} 

は(私も反復変数の名前を変更するだろうが、これは別の問題です)。

.NET 3.5以降を使用している場合は、LINQ to XMLを使用することを検討することもできますが、これは確かにこのような点で簡単です。

+0

エラー「System.Xml.XmlNode」「getElementsByTagNameの」となし拡張メソッド「のgetElementsByTagName」タイプの最初の引数を受け入れる「System.Xml.XmlNode」の定義が含まれていませんが、見つけることができる(あなたが不足しています使用指示文またはアセンブリ参照?) – user1156000

+0

@ user1156000:編集...(これがLINQ to XMLを好む理由の1つです) –

+0

これは完璧です - ありがとう。 – user1156000

関連する問題