2016-08-05 7 views
0

これは私のコードです。このようなXMLファイルから読み取るしようとしてgetElementsByTagNameのは、最初のノード(たXMLDocument)を取得

FileInfo[] Files = difo.GetFiles("*.xml");    
     string[] parts; 
     string[] FileSearchRes = Directory.GetFiles(@"C:\Users\ahodhv\Perforce\ahodhv_RD0029717_1921\prod\delivery\q_rec\int_test\SOPS", "*.xml", SearchOption.AllDirectories); 
     int i = 0; 
     foreach (FileInfo File in Files) 

     { 
      parts = File.Name.Split('_');            
      boxvehicles.Items.Add(parts[0]); 
      string test = FileSearchRes[i]; 
      doc.Load(FileSearchRes[i]); 
      List<string> name = new List<string>(); 
      var accountNodes = doc.GetElementsByTagName("FpcBlock"); 
      for (int j = 0; j < accountNodes.Count; j++) 
      { 
       var account = accountNodes[j].SelectSingleNode("./FPC"); 
       if (account != null && account.Attributes != null) 
       { 
        // Read node attribute 
        name.Add(account.Attributes["Name"].Value + account.Attributes["Value"].Value); 
       } 
      } 
       i++;    
     } 

イム:

<FpcBlock Version="01"> 
     <FPC Name="1" Value="A" Updated="false" /> 
     <FPC Name="3" Value="B" Updated="false" /> 
     <FPC Name="5" Value="B" Updated="false" /> 
     <FPC Name="8" Value="B" Updated="false" /> 
     <FPC Name="10" Value="B" Updated="false" /> 
</FpcBlock> 

問題はラインにあります:

var accountNodes = doc.GetElementsByTagName("FpcBlock"); 

accountnodesには、より多くのノードが存在するため、カウント1が正しくありません。そのため、最初のノードのみが名前に追加されます。何が間違っているのですか?

編集:私が混乱していたら申し訳ありません。すべての行をリストの下に保存したいと思います。私が望むのは、このリストは次のようなものでなければならないということです。

などです。だから私は名前と値を保存します。しかし、現時点では、最初の行は1Aだけです。

EDIT nr 2: 私はGetElementsByTagName()メソッドを誤解しました。 GetElementsByTagName("FPC")に変更すると問題になるはずです。

+0

あなたのXMLには* FpcBlockという要素が1つしかありません。なぜあなたが1つだけ*あるときに複数のものを取るべきだと思うのかははっきりしない。あなたの例は不完全ですか? –

+0

私はちょっと混乱していたようです。私はの下に書かれたすべてを欲しいと思います。だから私はすべての5行をその下にしたいです –

+0

なぜ 'GetElementsByTagName(" FPC ")'、彼らはあなたが実際にしたいものだと思う? –

答えて

0

FpcBlockと呼ばれる要素をクエリしていますが、期待する要素はFPCと思われます。実際に見つけようとしている要素を探すために変更すると、おそらく問題が消えてしまうでしょう。

LINQ to XMLは、古いXmlDocument APIよりはるかにモダンで洗練されたAPIです。これで動作するようにこれまでよりよいだろう:

var nameValues = 
    from fpc in doc.Descendants("FPC") 
    select new 
    { 
     Name = (int) fpc.Attribute("Name"), 
     Value = (string) fpc.Attribute("Value") 
    }; 

は、作業のデモのためにthis fiddleを参照してください。

+0

ありがとうございました。私はこれを試み、それは魅力のように働いた。私はあなたの助けを答えとして記します。 –

関連する問題