使用LINQ和的XDocument,我可以在父标记所有的子元素? [英] Using Linq and XDocument, can I get all the child elements under parent tag?

查看:209
本文介绍了使用LINQ和的XDocument,我可以在父标记所有的子元素?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆