【问题标题】:select all attributes and its value for a given node-Linq to xml选择给定节点的所有属性及其值-Linq to xml
【发布时间】:2016-12-19 19:48:55
【问题描述】:

我有一个看起来像这样的 xml 文件

<?xml version="1.0" encoding="utf-8"?>
<Content>
  <Field Title="XYZ">
    <Description>Numeric</Description>
    <Comment>12345</Comment>
  </Field>
<Field Title="ABC">
    <Description>Alphabetic</Description>
    <Comment>QWERTY</Comment>
  </Field>
<Field Title="XYZ">
    <Description>Alphabetic</Description>
    <Comment>QWERTY</Comment>
  </Field>
</Content>

我想提取 &lt;Description&gt;&lt;Comment&gt; 的节点值 属于属性TitleValue='XYZ'

我使用 Linq to Xml 尝试了类似的操作,但没有得到预期的结果

string Xmlpath = @"d:\Test.xml";
XDocument mappings = XDocument.Load(Xmlpath);
var Data = from elm in mappings.Descendants("Field")
           where (string)elm.Attribute("Title") == "XYZ"
           select elm;

有人可以帮我吗?

【问题讨论】:

    标签: asp.net xml linq c#-4.0 linq-to-xml


    【解决方案1】:

    这将为您提供一个包含您指定的所有元素的集合:

     var result = XDocument.Load(XmlPath).Root
                           .Descendants("Field")
                           .Where(element => element.Attribute("Title") == "XYZ")
                           .Descendants()
                           .Where(element => element.Name == "Description" || 
                                             element.Name == "Comment")
                           .Select(element => element.Value).ToList();
    

    【讨论】:

    • 请注意,?. 是 C# 6.0,OP 用 C# 4.0 标记了问题。
    • OP 使用的代码也不受 NRE 影响:(string)elm.Attribute("Title") == "XYZ"
    【解决方案2】:

    您已设法获得与Data 变量中的“标题”属性值条件匹配的&lt;Field&gt; 元素。接下来,您可以使用Element() 获取&lt;Field&gt; 的子元素:

    var result = Data.FirstOrDefault();
    if(result != null)
    {
        Console.WriteLine((string)result.Element("Description"));
        Console.WriteLine((string)result.Element("Comment"));
    }
    

    或者,如果可以有多个匹配条件的&lt;Field&gt; 元素,则使用foreach

    foreach(result in Data)
    {
        Console.WriteLine((string)result.Element("Description"));
        Console.WriteLine((string)result.Element("Comment"));
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-10
      相关资源
      最近更新 更多