Sri*_*ddy 9 .net c# xml linq-to-xml
我有一个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>
Run Code Online (Sandbox Code Playgroud)
使用Linq和XDocument,我可以提取"摘要"信息,但如何在"摘要"标签下提取"帐户"信息?
XDocument XMLDoc = XDocument.Load("testdata.xml");
XElement accounts = (from xml2 in XMLDoc.Descendants("summary")
select xml2).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)
如何指定像" summary/account"这样的东西,以便它返回下面的所有元素<summary>?请注意,我有<account>下<detail><accounts>,我只希望在总结标签的元素.
编辑:(安德鲁的解决方案)
<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>
Run Code Online (Sandbox Code Playgroud)
Rob*_*ney 20
你应该使用这个Elements方法:
var accounts = doc.Root.Elements("summary").Elements("account");
Run Code Online (Sandbox Code Playgroud)
或者,或者,XPathSelectElements在这种情况下更简单:
var accounts = doc.XPathSelectElements("/data/summary/account");
Run Code Online (Sandbox Code Playgroud)
在这种情况下,你也可以使用Descendants,如安德鲁·巴伯建议,但一般你应该只做到这一点,当你真的想找到一个给定的名称的所有后代,而不仅仅是眼前的孩子.否则,您的代码会进行大量不需要的搜索,并且可能会返回您不希望它的元素.
| 归档时间: |
|
| 查看次数: |
46214 次 |
| 最近记录: |