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

Вы загружаете два документа, но вы показали только один из них - и вы не сказали, что результат сравнивается с тем, что вы хотите. –

ответ

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); 

I найти это намного проще для чтения, чем делать все за один раз. Вы могли бы избавиться от переменной repeatingDoc и сделать , что бит встроенный, но я определенно не сделал бы целиком вещь inline.

+0

незначительные изменения в захвате элемента на основе моих потребностей, но он отлично работает как основа. Спасибо –