使用LINQ和的XDocument,我可以在父标记所有的子元素? [英] Using Linq and XDocument, can I get all the child elements under parent tag?
问题描述
我有一个XML
<数据>
<总结>
<账户curr_desc ='美元'acct_nbr ='123'网='1000.00'/>
<账户curr_desc ='美元'acct_nbr ='456'网='2000.00'/>
< /总结>
<详情>
<帐户>
<账户acct_nbr =123电流=USD>
<活动色='假'settle_date = '02 2010年07月AMT ='580.00'/>
<活动色='真'settle_date = 09 2010年07月AMT ='420.00'/>
< /帐户>
<账户acct_nbr =456电流=USD>
<活动色='真'settle_date = '12 2010年12月AMT ='1500.00'/>
<活动色='真'settle_date = '19 2010年12月AMT ='500.00'/>
< /帐户>
< /帐户>
< /详细信息及GT;
< /数据>
使用LINQ和的XDocument,我可以提取摘要信息,但我怎么能提取在摘要标签?
帐户信息 的XDocument xmlDoc中= XDocument.Load(testdata.xml);
的XElement占=(从XML2在XMLDoc.Descendants(摘要)
选择XML2).FirstOrDefault();
我怎么可以指定类似汇总/帐户
,使其返回我下的所有元素<总结>
?请注意,我有<帐户>
在<详情><帐户>
,我只想要的元素在总结标签。
编辑:(解决方案安德鲁)
VAR账户= XMLDoc.Root.Elements(摘要)元素(账户)。
的foreach(的XElement ELEM的帐户)
{
sb.Append(elem.ToString());
}
您应该使用元素
方法:
VAR账户= doc.Root.Elements(摘要)元素(账户)。
或者,可替代地, XPathSelectElements
,而在这种情况下,是较简单的:
VAR账户= doc.XPathSelectElements(/数据/汇总/账户);
在这种情况下,你也可以使用后代
,安德鲁理发建议,但一般而言,您应该只做到这一点时,你真的想找到一个给定的名称的所有后代,而不仅仅是眼前的孩子。否则,你的code做了很多搜索的,它并不需要,并可能返回元素,你不希望它。
I have an XML
<data>
<summary>
<account curr_desc='USD' acct_nbr='123' net='1000.00' />
<account curr_desc='USD' acct_nbr='456' net='2000.00' />
</summary>
<details>
<accounts>
<account acct_nbr="123" curr="USD">
<activity color='False' settle_date='02 Jul 2010' amt='580.00' />
<activity color='True' settle_date='09 Jul 2010' amt='420.00' />
</account>
<account acct_nbr="456" curr="USD">
<activity color='True' settle_date='12 Dec 2010' amt='1500.00' />
<activity color='True' settle_date='19 Dec 2010' amt='500.00' />
</account>
</accounts>
</details>
</data>
Using Linq and XDocument, I can extract "summary" information but how can I extract "account" information under "summary" tag?
XDocument XMLDoc = XDocument.Load("testdata.xml");
XElement accounts = (from xml2 in XMLDoc.Descendants("summary")
select xml2).FirstOrDefault();
How can I specify something like "summary/account
" so that it returns me all the elements under <summary>
? Note, that I have <account>
under <detail><accounts>
, I only want the elements under summary tag.
Edit: (Solution from Andrew)
var accounts = XMLDoc.Root.Elements("summary").Elements("account");
foreach (XElement elem in accounts)
{
sb.Append(elem.ToString());
}
You should use the Elements
method:
var accounts = doc.Root.Elements("summary").Elements("account");
Or, alternatively, XPathSelectElements
, which in this case is simpler:
var accounts = doc.XPathSelectElements("/data/summary/account");
In this instance you can also use Descendants
, as Andrew Barber suggested, but in general you should only do this when you really want to find all descendants with a given name, and not just immediate children. Otherwise your code does a lot of searching that it doesn't need to, and may return elements you don't want it to.
这篇关于使用LINQ和的XDocument,我可以在父标记所有的子元素?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!