2010-11-09 1 views
0

У меня есть следующие XDocument, я пытаюсь добавить запись элементов в элементе предметов со следующим кодом:XElement к Добавление данных XDocument

xdocument.Root.Element("items").add(item) 

Это не работает как элемент элементы не могут быть найдены. Я думаю, что это проблема с пространствами имен, но я не могу заставить это работать. Любая помощь будет высоко ценится.

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://mynamespace.com" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> 
              <SOAP-ENV:Body> 
               <ns1:getUpload> 
                <itemObj> 
                 <items SOAP-ENC:arrayType="ns1:item[2]" xsi:type="ns1:ArrayOfItem"> 
                 <!--Item elements to go here--> 
                 </items> 
                </itemObj> 
               </ns1:getUpload> 
              </SOAP-ENV:Body> 
             </SOAP-ENV:Envelope> 

ответ

1

Это потому, что вы <items> не является прямым потомком вашего корневого элемента. Вставлять это в консольном приложении показывает, что происходит:

var xd = XDocument.Load("xml.xml"); 

Console.WriteLine(xd.Root.Name); // {http://schemas.xmlsoap.org/soap/envelope/}Envelope 
Console.WriteLine(xd.Root.Descendants("items").First().Name); //items 
Console.ReadKey(); 

Descendants проверяет через все ребенок (и внук и т.д.) для элемента с именем, Element смотрит только на прямые детей.

Я не уверен, если потомки - это глубина первой или пятой. Сначала вы можете быть осторожны при работе с огромными документами.

+0

А я вижу, меня просто глупо, спасибо за помощь :-) – fedor333