如何获得具有特定属性的所有后代 - Linq to Xml

How to get all descendants with a particular attribute - Linq to Xml

<Grid>
   <StringColumn Header="Name"/>
   <DateColumn Header="Date"/>
</Grid>

这个问题可能已有答案,但我似乎找不到。

我需要找到属性为 "Header"

的所有 xml 个元素

元素的名称可以不同。

如何使用 Linq to XML?

像这样的东西应该可以工作:

IEnumerable<XElement> elements =  
    from el in root.Elements("Grid")  
    where (string) el.Attribute("Header") != null  
    select el; 

使用这个:

var grid = XElement.Parse(@"<Grid>
   <StringColumn Header=""Name""/>
   <DateColumn Header=""Date""/>
</Grid>");

var elements = grid.XPathSelectElements(".//*[@Header]");

这应该会为您提供所需的元素:

XDocument document = ...;
var elementsWithHeader = document.Descendants()
                                 .Where(e => e.Attributes().Any(a => a.Name == "Header"));

使用 xml linq。代码是打印任何具有带有 Header 属性的子元素的 Grid 元素。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication7
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            XDocument doc = XDocument.Load(FILENAME);
            List<XElement> headers = doc.Descendants("Grid").Where(x => x.Elements().Where(y => y.Attribute("Header") != null).Any()).ToList();

        }
    }

}