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 に答える