xdocument添加xdocument

时间:2013-03-15 20:57:03

标签: c# linq-to-xml xml-namespaces

我做错了不能抓住shippingreceiptlineitem添加到第一个文档,我是否需要添加命名空间?

        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>

1 个答案:

答案 0 :(得分: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变量并 位内联,但我绝对不会内联整个事物。