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

3 に答える 3

3

できるよ:

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

または、この場合は同じになります。

var orders = doc.Descendants("Amount")
                .Descendants("OrderId");
于 2012-11-05T06:55:23.273 に答える
2
var orderIds = doc.Descendants("OrderId")
                  .Select(e => e.Value)
                  .ToArray();

結果は次のようになります。

[2, 3, 21, 23]
于 2012-11-05T07:02:24.310 に答える
1

情報のためだけに、これを適切に理解してください

XContainer.Descendants メソッド (XName) - このドキュメントまたは要素の子孫要素のフィルター処理されたコレクションをドキュメント順に返します。一致する XName を持つ要素のみがコレクションに含まれます。

だからあなたのコードで

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

これにより Element が提供さ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
                          };
于 2012-11-05T07:21:10.627 に答える