如何获得具有特定属性的所有后代 - 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();
}
}
}
<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();
}
}
}