0

给定一个 XML 文件,例如:

<?xml version="1.0" encoding="utf-8"?>
<Root>
   <Policy id="832cbfc6-a451-4d77-a995-4ceb9d3bbe01" username ="DCassidy">     
      <Title>Test 1</Title>    
  </Policy>
  <Policy id="832cbfc6-a451-4d77-a995-4ceb9d3bbe02" userName ="DCassidy">
    <Title>Test 2</Title>
 </Policy>........and so on

是否可以使用 LINQ to XML 返回所有“策略”元素及其包含的元素,而无需指定每个元素,例如:

var subset = doc.Elements("Policy").SelectMany(x => new[] { x.Element("Title").Value });

我需要能够动态地将元素添加到文件中,过滤并返回一个子集。

优选地,返回 XElemets 的集合,以便稍后我可以调用:

subset.CreateReader() on.

编辑

要更清楚。我将希望根据用户名属性返回所有策略对象及其后代。我想要获取该子集并在其上使用 CreateReader()

有人可以帮忙吗?

谢谢

4

3 回答 3

0

使用Elements()不指定元素名称的方法来获取所有直接后代:

XDocument.Root.Elements()

于 2012-12-14T14:14:13.717 回答
0

您可以使用Elements不指定名称的重载来获取所有子元素。

var xml = @"
<Root>
   <Policy id='832cbfc6-a451-4d77-a995-4ceb9d3bbe01' username ='DCassidy'>     
      <Title>Test 1</Title>    
  </Policy>
  <Policy id='832cbfc6-a451-4d77-a995-4ceb9d3bbe02' userName ='DCassidy'>
    <Title>Test 2</Title>
 </Policy>
</Root>
";
var xElement = XElement.Parse(xml);
var subset = xElement.Elements("Policy").SelectMany(e => e.Elements());

subset是一个,其IEnumerable<XElement>内容是:

<Title>Test 1</Title> 
<Title>Test 2</Title> 
于 2012-12-14T14:14:26.957 回答
0

你的意思不是清楚,但也许:

var subset = doc.Elements("Policy").Descendants();

或者

var subset = doc.Elements("Policy").DescendantsAndSelf();

这将获得所有后代,而不仅仅是直接后代。如果您可以更清楚地了解您要实现的目标,那将有所帮助。

于 2012-12-14T14:14:27.293 回答