c# – 使用LINQ to XML查询带有前缀命名空间的xml子元素

所以我有一些XML通常看起来像这样

<wd:Data xmlns:wd="urn:com.foo.bar/GetResult">
    <wd:Result>
        <wd:field1>lorem</wd:field1>
        <wd:field2>ipsum</wd:field2>
        <wd:field3>dolor</wd:field3>
        <wd:field4>sit</wd:field4>
    </wd:Result>
</wd:Data>

命名空间以“wd”为前缀

我希望能够在< wd:Result> …< / wd:Result>中获取每个元素.并创建一个新的KeyValuePair< string,string>其中键是元素名称,值是元素的值,如下所示:

{“field1”,“lorem”}
{“field2”,“ipsum”}
{“field3”,“dolor”}
{“field4”,“sit”}

我的斗争是使用名称空间前缀.我是LINQ的新手,但我总是能够得到这样的代码来处理这样的代码:

var data = XElement.Parse(theXml); 
XNamespace ns = "urn:com.foo.bar/GetResults"; 
var result = data.Elements(ns + "Result")
                 .Select(x => new KeyValuePair<string, string>(x.Name.LocalName, x.Value))
                 .ToList();

我该如何查询这些数据以产生所需的结果?

我没有和LINQ结婚,所以社区认为最好的对我来说没问题.

最佳答案
事实证明我需要将Descendants()与Elements()结合起来

以下代码完全实现了我的目标:

    var data = XElement.Parse(theXml);  
    XNamespace ns = "urn:com.foo.bar/GetResults";  
    var result = data.Descendants(ns + "Result")
                     .Elements()
                     .Select(x => new KeyValuePair<string, string>(x.Name.LocalName, x.Value))
                     .ToList();

转载注明原文:c# – 使用LINQ to XML查询带有前缀命名空间的xml子元素 - 代码日志