2013-03-15 78 views
0

我做錯了什麼不能搶shipmentreceiptlineitem添加到第一個文檔,我需要添加一個命名空間嗎?xdocument添加xdocument

 XDocument xdoc = XDocument.Load("FirstPart.xml"); 
     xdoc.Root.Add(XDocument.Load("RepeatingPart.xml").Element("ShipmentReceiptLineItem").Elements()); 

XML搶來源:

<tns:ShipmentReceiptNotification xmlns:dl="urn:rosettanet:specification:domain:Logistics:xsd:schema:02.18" 
xmlns:tns="urn:rosettanet:specification:interchange:ShipmentReceiptNotification:xsd:schema:02.01"> 
<tns:ShipmentReceiptLineItem> 
</tns:ShipmentReceiptLineItem> 
</tns:ShipmentReceiptNotification> 
+0

您正在加載兩個文檔,但您只顯示其中一個 - 而且您沒有說明結果與您希望的結果進行比較的結果。 – 2013-03-15 21:00:49

回答

2

是的,你需要的時候你試圖找到ShipmentReceiptLineItem元素使用的名稱空間。您需要從根元素中去,否則你的Element(...)檢查將只能夠找到根元素:

XDocument xdoc = XDocument.Load("FirstPart.xml"); 
XNamespace tns = "urn:rosettanet:specification:interchange:ShipmentReceiptNotification:xsd:schema:02.01"; 
xdoc.Root.Add(XDocument.Load("RepeatingPart.xml") 
         .Root 
         .Element(tns + "ShipmentReceiptLineItem") 
         .Elements()); 

或分裂它進一步:

XDocument repeatingDoc = XDocument.Load("RepeatingPart.xml"); 
XNamespace tns = "urn:rosettanet:specification:interchange:ShipmentReceiptNotification:xsd:schema:02.01";  
var elementsToAdd = repeatingDoc.Root 
           .Element(tns + "ShipmentReceiptLineItem") 
           .Elements()); 
var mainDoc = XDocument.Load("FirstPart.xml"); 
mainDoc.Root.Add(elementsToAdd); 

我發現這比閱讀一切都要簡單得多。你可能會擺脫repeatingDoc變量,並且位內聯,但我絕對不會做內聯的整個事情。

+0

根據我的需要對抓取元素進行細微更改,但它作爲一個基礎很有用。謝謝你 – 2013-03-15 22:00:47