XElement à XDocument Ajout
-
29-09-2019 - |
Question
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:
xdocument.Root.Element("items").add(item)
Cela ne fonctionne pas comme l'élément des éléments ne peut être trouvé. Je pense qu'il est un problème avec les espaces de noms, mais je ne peux pas sembler obtenir ce travail. 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>
La solution
Il est parce que vous n'est pas <items>
l'enfant direct de votre élément racine.
Tirer cela dans une application 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();
vérifie Descendants
par tous les enfants (et petits-enfants, etc.) pour l'élément nommé, Element
ne regarde que les enfants directs.
Je ne sais pas si le Descendants est d'abord la profondeur ou en largeur d'abord, vous voudrez peut-être prudent sur les performances des documents énormes.