2015-09-03 61 views
2

我有以下xml部分,並試圖提取密鑰已知的值。下面的例子是一個片段,來自一個包含1000個節點的更大的xml。c#從下一個節點提取值

<?xml version="1.0" encoding="utf-8"?> 
<DictionarySerializer> 
    <item> 
     <key>key1</key> 
     <value>CONTENT1</value> 
    </item> 
    <item> 
     <key>key2</key> 
     <value>CONTENT2</value> 
    </item> 
</DictionarySerializer> 

我假設上述被稱爲串XML, 然後用

XDocument.Parse(xml) 
.Descendants("key") 
.Where(x => (string)x.Value == "key1") 
.FirstOrDefault().NextNode.ToString() 

我能得到的字符串<value>CONTENT1</value>但我根本不能讓我周圍的頭如何獲得價值節點的值要說。 我afrad它是超級簡單,我只是被卡在一個coffein循環:-)

回答

0

如果您想從所有1000個元素的XML中獲取所有的鍵和值。您可以使用:

Dictionary<string, string> elements = new Dictionary<string, string>(); 

xml.Root.Elements().ToList().ForEach(xmlElement => 
{ 
    elements.Add(xmlElement.Descendants("key").First().Value, 
       xmlElement.Descendants("value").First().Value); 
}); 

因此,元素字典將包含所有1000個節點。

+0

,所以這是第一個對我來說計算器。絕對不是最後一個。謝謝你一堆很好的答案。 –

+0

@KimIsaksen好..很高興幫助你.. !! –

1
XDocument.Parse(xml) 
.Descendants("key") 
.Where(x => (string)x.Value == "key1") 
.FirstOrDefault().Value.ToString() 

你應該使用.value的屬性,而不是.NextNode

0

嘗試投NextNodeXElement並從中獲得Value

0

考慮到您可以使用XPath表達式。

expression = @"//Item[Key='1']/Value" 
XmlNodeList nodeList = xmlDocument.SelectNodes(expression); 

這會爲您提供Key = 1項目的值節點。只需找到所需節點的值。

我相信使用的XDocument你也可以嘗試,

string output = xDocument.XPathEvaluate(expression);