簡體   English   中英

Linq to XML不能獲取所有節點

[英]Linq to XML not getting all nodes

<?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

你可以做:

var orderIds = doc.Descendants("OrderId");
foreach (var orderId in orderIds)
{
    Console.WriteLine(orderId.Value);
}

或者,在這種情況下將是相同的:

var orders = doc.Descendants("Amount")
                .Descendants("OrderId");
var orderIds = doc.Descendants("OrderId")
                  .Select(e => e.Value)
                  .ToArray();

結果將是:

[2, 3, 21, 23]

僅用於信息理解和正確

XContainer.Descendants方法(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
                          };

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM