<?xml version="1.0" encoding="utf-8"?>
<OrdersReport Date="2012-08-01">
<Returns>
      <Amount>
        <OrderId>2</OrderId>
        <OrderId>3</OrderId>
        <OrderId>21</OrderId>
        <OrderId>23</OrderId>
      </Amount>
    </Returns>
</OrdersReport>

这是我试图获取orderID的代码:
 var amount = doc.Descendants("Amount")
  .Select(y => new
  {
   OrderId = (int)y.Element("OrderId")
   });
foreach (var r in amount)
  {
   Console.WriteLine(r.OrderId);
  }

 Console.Read();

我的输出是:
2
2

最佳答案

只是为了下面的信息
XContainer.Descendants Method (XName)-按文档顺序返回此文档或元素的子元素的筛选集合。集合中只包含具有匹配xname的元素。
所以在你的密码里

var amount = doc.Descendants("Amount")
  .Select(y => new
  {
   OrderId = (int)y.Element("OrderId")
   });

这将给您元素Amount并且当您编写y.Element("OrderId")时,将返回其子元素的第一个元素。
因此,要获取所有orderid元素,您需要写下doc.Descendants("OrderId")documentRoot.Descendants("Amount").Descendants()
Descendants-并不意味着返回在desendant方法中写入的元素名的子元素。
最后下面的解决方案对我来说是正确的
XElement documentRoot  = XElement.Parse (@"<OrdersReport Date='2012-08-01'>
                                                  <Returns>
                                                      <Amount>
                                                             <OrderId>21</OrderId>
                                                             <OrderId>3</OrderId>
                                                        </Amount>
                                                </Returns>
                                                </OrdersReport>");

           var orderids = from order in
                             documentRoot.Descendants("Amount").Descendants()
                          select new
                          {
                              OrderId = order.Value
                          };

关于c# - Linq to XML不能获取所有节点,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13227217/

10-12 00:27