选择给定节点-Linq到xml的所有属性及其值

时间:2016-08-12 18:05:05

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

我有一个看起来像这样的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>

我想提取<Description><Comment>的节点值 带有Title

的属性Value='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;

有人能帮助我吗?

2 个答案:

答案 0 :(得分: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();

答案 1 :(得分:0)

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

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

或者,如果有多个foreach元素符合条件,则使用<Field>

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