Добавление Xelement в Xdocument - PullRequest
       19

Добавление Xelement в Xdocument

0 голосов
/ 09 ноября 2010

У меня есть следующий xdocument, я пытаюсь добавить элементы item в элемент items с помощью следующего кода:

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

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

<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 Ответ

1 голос
/ 09 ноября 2010

Это потому, что вы <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 просматривает только прямые дочерние элементы.

Я не уверен, имеет ли значение Descendants значение Depth First или Breadth First, поэтому вы можете быть осторожны с производительностью больших документов.

...