所以我有一些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结婚,所以社区认为最好的对我来说没问题。
答案 0 :(得分:5)
事实证明,我需要将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();
答案 1 :(得分:2)
好的,这不是一个完整的解决方案,但我认为你应该基本了解在XML中使用命名空间和使用LINQ读取数据
小心说你已经在内存中加载了XML,以下是你可以访问
的方法XDocument inventory = XDocument.Load("path_to_your_file.xml");
XNamespace vs = "urn:com.foo.bar/GetResult";
var names = doc.Descendants(vs + "Result")
.Select(x => (string) x)
.ToList();
这不是XML结构的确切实现,但我想你了解如何使用命名空间
答案 2 :(得分:0)
你也可以使用localname属性并执行类似这样的操作
mpirun