给定的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返回所有“Policy”元素及其包含的元素,而不必指定以下每个元素:
var subset = doc.Elements("Policy").SelectMany(x => new[] { x.Element("Title").Value });我需要能够动态地向文件中添加元素,过滤并返回一个子集.
最好是返回一个XElemets集合,这样以后我就可以调用:
subset.CreateReader() on.编辑
说得更清楚。我希望根据username属性返回所有Policy对象及其后代。我想要接受这个子集并在它上使用CreateReader(),。
有人能帮忙吗?
谢谢
发布于 2012-12-14 14:14:26
您可以使用没有指定名称的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-14 14:14:13
在不指定元素名称的情况下,使用Elements()方法获取所有直接后代:
XDocument.Root.Elements()
发布于 2012-12-14 14:14:27
你的意思还不太清楚,但也许:
var subset = doc.Elements("Policy").Descendants();或
var subset = doc.Elements("Policy").DescendantsAndSelf();这将得到所有的后代,而不仅仅是直接的后代。如果你能更清楚地了解你想要达到的目标,那会有帮助的。
https://stackoverflow.com/questions/13880268
复制相似问题