2010-11-09 27 views
0

Je l'XDocument suivante, je suis en train d'ajouter des éléments de l'élément dans l'élément éléments avec le code suivant:Appending XElement à XDocument

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

Cela ne fonctionne pas comme l'élément objets ne peut pas être trouvé. Je pense que c'est un problème avec les espaces de noms, mais je n'arrive pas à le faire fonctionner. Toute aide sera très appréciée.

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

Répondre

1

Il est parce que vous n'est pas <items> l'enfant direct de votre élément racine. cela dans une Sticking application de la console montre ce qui se passe:

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 chèques par tous les enfants (et petits-enfants, etc.) pour l'élément nommé, Element ne regarde que les enfants directs. Je ne suis pas sûr si Descendants est Depth First ou Breadth First, donc vous pouvez faire attention aux performances sur les documents volumineux.

+0

Ah je vois, moi juste être vraiment stupide, merci pour l'aide :-) – fedor333