我有以下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>
答案 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,所以你可能要小心对大型文档的表现。