[英]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.