所以我有一些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();