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