2013-10-30 99 views
2

我有以下格式的XML獲取ChildNode名稱和值

<DBdestination> 
    <val1>ANI</val1> 
    <val2>DNIS</val2> 
    <val3>Date</val3> 
    <val4>Time</val4> 
    <val5>ConnId</val5> 
    <val6>UUID</val6> 
    <val7>EmployeeId</val7> 
    <val8>AgentDN</val8> 
</DBdestination> 

我需要在列表中獲得的DBdestination的孩子和他們的價值觀的名稱(或東西本身)爲val1,val2,val3,val4.....而在另一個列表ANI,DNIS......

我試圖

var xdoc = XDocument.Load("C:/Users/xxx/Desktop/RCCM_TOOL/configRCCM.xml"); 
var units = xdoc.Descendants("DBdestination").Elements().ToArray(); 

但是這給了我整個標籤這樣的。

我怎樣才能得到我想要的結果?

回答

1

你是非常接近:

xdoc.Descendants("DBdestination") 
    .Elements() 
    .Select(e => Tuple.Create(e.Name.ToString(), e.Value)) 
    .ToList() 

這會給你一個List<Tuple<string, string>>。其他

一個替代方案是這樣的:

... 
    .Select(e => Tuple.Create(e.Name, e.Value)) 
    .ToList() 

而且會給你一個List<Tuple<XName, string>>。好的是XName可以與名稱val1比較,不需要namespaceToString()會給你完全合格的名稱。


處理需要支持.NET 3.5;讓我們做這樣說:

xdoc.Descendants("DBdestination") 
    .Elements() 
    .Select(e => new 
    { 
     Name = e.Name, 
     Value = e.Value 
    }) 
    .ToList() 
+0

Tuple沒有被我的IDE識別。我缺少什麼參考? –

+0

@AnoushkaSeechurn,你使用的是什麼版本的.NET框架? –

+0

其版本3.5 –

1
var xdoc = XDocument.Load("C:/Users/xxx/Desktop/RCCM_TOOL/configRCCM.xml"); 
      var units = xdoc.Descendants("DBdestination").Elements(); 
      var tagnames = units.Select(u => u.Name.LocalName).ToArray(); 
      var values = units.Select(u => u.Value).ToArray(); 

你可以用字典去,如果你看看由元素名稱來訪問值,像下面:

 var xdoc = XDocument.Load("C:/Users/xxx/Desktop/RCCM_TOOL/configRCCM.xml"); 
     var units = xdoc.Descendants("DBdestination").Elements(); 
     var dictionary = new Dictionary<string, string>(); 
     foreach (var u in units) 
     { 
      dictionary.Add(u.Name.LocalName, u.Value); 
     } 

之後,你可以從訪問值字典如下:

string value1=dictionary["val1"];