2013-03-15 57 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