我試圖修復一段代碼,它沒有做我想做的事情。該代碼由一位聲稱工作完美的工程師留下。他一直在使用XPATH而不是Linq,所以在短期內我正在尋找基於XPATH的解決方案。XML中的所有子節點都鏈接到一個父節點
我搜索了網頁,但無法將我發現的內容轉換爲工作解決方案。
的XML看起來像:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Orders>
<Order>
<OrderId>6175</OrderId>
<OrderNumber>6175</OrderNumber>
<OrderDate>2016-08-19 13:17:41</OrderDate>
<OrderLineItems>
<ItemName>Name of Item</ItemName>
<Quantity>1</Quantity>
<Meta/>
</OrderLineItems>
</Order>
</Orders>
他與Visual Studio 2008中的擔憂讀取XML看起來像創建的腳本:
public override void CreateNewOutputRows()
{
string filename = Variables.strFileInLoop;
XmlDocument doc = new XmlDocument();
doc.Load(filename);
// loop orders
foreach (XmlNode shipmentNode in doc.DocumentElement.SelectNodes("/Orders/Order"))
{
OutputOrdersBuffer.AddRow();
String OrderId = GetNodeText("OrderId", shipmentNode).Trim();
OutputOrdersBuffer.OrderId = OrderId;
OutputOrdersBuffer.OrderNumber = GetNodeText("OrderNumber", shipmentNode).Trim();
OutputOrdersBuffer.OrderDate = GetNodeText("OrderDate", shipmentNode).Trim();
String replace = @"C:\Projects\Customername\IN\";
OutputOrdersBuffer.FileName = filename.Replace(replace, "");
foreach (XmlNode OrderLineItemNode in shipmentNode.SelectNodes("/Orders/Order/OrderLineItems"))
{
OutputOrderLinesBuffer.AddRow();
OutputOrderLinesBuffer.OrderId = OrderId;
OutputOrderLinesBuffer.ItemName = GetNodeText("ItemName", OrderLineItemNode).Trim();
OutputOrderLinesBuffer.Quantity = GetNodeText("Quantity", OrderLineItemNode).Trim();
OutputOrderLinesBuffer.Meta = GetNodeText("Meta", OrderLineItemNode).Trim();
}
}
}
當我們嘗試導入多的XML會發生什麼訂單是代碼將所有OrderLineItems附加到所有訂單。
所以,如果有2個OrderLineItems的文件中有10個獨特的訂單,它會發出10個訂單,每個訂單有20個OrderLineItems。
正如我所說,我到處尋找(我認爲),但無法將我發現的解決方案轉換爲OrderLineItems僅與其所屬訂單鏈接的解決方案。
也許你應該使用OutputOrdersBuffer.OutputOrderLinesBuffer.AddRow();等等...... – Fruchtzwerg