【发布时间】:2023-03-06 11:20:01
【问题描述】:
如何使用 LINQ 解析以下 XML?
我需要为每个 Order 和 OrderCancelled 插入数据库表 OrderNumber, ShipAddress, ShipCity, ShipState。
然后在一个单独的表中,我需要从 Returns/Amount 部分插入 OrderId。
<!-- language: lang-xml -->
<?xml version="1.0" encoding="utf-8"?>
<OrdersReport Date="2012-08-01">
<Client>
<ClientId>1</ClientId>
<Orders>
<Order>
<OrderNumber>1</OrderNumber>
<ShipAddress>123 Main St.</ShipAddress>
<ShipCity>MyCity</ShipCity>
<ShipState>AZ</ShipState>
</Order>
<Order>
<OrderNumber>2</OrderNumber>
<ShipAddress>111 Main St.</ShipAddress>
<ShipCity>OtherCity</ShipCity>
<ShipState>AL</ShipState>
</Order>
<OrderCancelled>
<OrderNumber>3</OrderNumber>
<ShipAddress>111 Main St.</ShipAddress>
<ShipCity>OtherCity</ShipCity>
<ShipState>AL</ShipState>
</OrderCancelled>
</Orders>
<Returns>
<Amount>
<OrderId>2</OrderId>
<OrderId>3</OrderId>
</Amount>
</Returns>
</Client>
<Client>
<ClientId>2</ClientId>
<!-- Same Tree structure as Client 1 -->
</Client>
</OrdersReport>
根据收到的回复,我更新了问题。
var doc = XDocument.Load(rootFolder + "Generic.xml");
var query = doc.Descendants("Order")
.Concat(doc.Descendants("OrderCancelled"))
.Select(x => new
{
OrderNumber = (int)x.Element("OrderNumber"),
ShipAddress = (string)x.Element("ShipAddress"),
ShipCity = (string)x.Element("ShipCity"),
ShipState = (string)x.Element("ShipState")
});
var amount = doc.Descendants("Amount")
.Select(y => new
{
OrderId = (int)y.Element("OrderId")
});
foreach (var o in query)
{
Console.WriteLine(o.OrderNumber + o.ShipAddress + o.ShipCity);
}
foreach (var r in amount)
{
Console.WriteLine(r.OrderId);
}
金额枚举只给了我第一个OrderId,我做错了什么?
【问题讨论】:
-
发布后颜色出现了 :-) 但还没有缩进。
标签: c# xml linq linq-to-xml