将Xelement附加到Xdocument

时间:2010-11-09 10:19:26

标签: .net linq-to-xml xelement

我有以下xdocument,我试图使用以下代码在items元素中追加item元素:

 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 个答案:

答案 0 :(得分: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的项目,只查看直接孩子。

我不确定Descendants是Depth First还是Exteth First,所以你可能要小心对大型文档的表现。