使用Linq和XDocument,我可以获取父标记下的所有子元素吗?

我有一个XML

     

使用Linq和XDocument,我可以提取“摘要”信息,但如何在“摘要”标签下提取“帐户”信息?

 XDocument XMLDoc = XDocument.Load("testdata.xml"); XElement accounts = (from xml2 in XMLDoc.Descendants("summary") select xml2).FirstOrDefault(); 

如何指定“ summary/account ”之类的内容,以便它返回

下的所有元素? 请注意,我在 下有 ,我只想要摘要标记下的元素。

编辑:(安德鲁的解决方案)

 var accounts = XMLDoc.Root.Elements("summary").Elements("account"); foreach (XElement elem in accounts) { sb.Append(elem.ToString()); } 

您应该使用Elements方法:

 var accounts = doc.Root.Elements("summary").Elements("account"); 

或者,替代地, XPathSelectElements ,在这种情况下更简单:

 var accounts = doc.XPathSelectElements("/data/summary/account"); 

在这种情况下,您也可以使用Descendants ,正如Andrew Barber建议的那样,但一般情况下,只有在您真正想要查找具有给定名称的所有后代而不仅仅是直接子项时,才应该执行此操作。 否则,您的代码会执行大量不需要的搜索,并且可能返回您不希望它的元素。

 var accountSummaryElems = XMLDoc.Element("summary").Elements("account"); 

这为您提供了summary元素下的account元素的集合。 然后,您可以迭代它们以获取值。

编辑使用相同的模式; 我调用First()而不是FirstOrDefault()因为如果找不到“account”元素,代码将无法运行。

然后你有正确的想法迭代返回的集合。