c#从nextnode中提取值

时间:2015-09-03 14:39:58

标签: c# xml

我有以下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循环: - )

4 个答案:

答案 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);