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

标签 c# linq linq-to-xml xelement

所以我有一些通常看起来像这样的 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", "坐下"}

我的难题在于 namespace 前缀。我是 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 子元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12715738/

相关文章:

c# - 为什么这个类型转换不起作用?

c# LINQ 按对象列表属性的子属性对列表进行排序

c# - 在带参数的 Where 子句中使用 Expression<Func<>>

时间:2019-05-17 标签:c#XElementlinq,returnbool

c# - 在 C# 中从文件中获取不同节点值的快速方法?

c# - 一个派生类的多个基类,C#中的继承

c# - 使用 C# 将数据传入和传出 SQL 表

c# 如何将泛型类型参数转换并传递给内部函数?

c# - 使用 LINQ 和高度嵌套的 XML 创建类对象

c# - 如何从 XElement 检索元素