0

我做错了不能抓取 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>
4

1 回答 1

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变量并内联执行位,但我绝对不会内联执行整个操作。

于 2013-03-15T21:01:53.960 回答