我有以下xml部分,并尝试提取已知密钥的值。下面的示例是一个片段,来自包含1000个节点的较大xml。
<?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 :(得分:1)
XDocument.Parse(xml)
.Descendants("key")
.Where(x => (string)x.Value == "key1")
.FirstOrDefault().Value.ToString()
您应该使用 .Value 属性而不是 .NextNode
答案 1 :(得分:0)
尝试将 NextNode 转换为 XElement 并从中获取 Value 。
答案 2 :(得分: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个节点。
答案 3 :(得分:0)
考虑到您可以使用XPath表达式。
expression = @"//Item[Key='1']/Value"
XmlNodeList nodeList = xmlDocument.SelectNodes(expression);
这将为您提供Key = 1的项目的值节点。只需找到所需节点的值即可。
我相信使用XDocument你也可以尝试,
string output = xDocument.XPathEvaluate(expression);