Avec mon code, ca me donne:
<NoeudParent>
<NoeudEnfant />
</NoeudParent>
Le problème, c'est qu'avec la solution obtenue par mon code, je n'arrive plus à ajouter de noeud au NoeudEnfant. Au lieu de l'ajouter comme ceci:
<NoeudParent>
<NoeudEnfant>
<NoeudEnfant2>
</NoeudEnfant2>
</NoeudEnfant>
</NoeudParent>
Il l'ajoute comme cela, comme si NoeudEnfant2 ne faisait pas partie de NoeudEnfant:
<NoeudParent>
<NoeudEnfant />
<NoeudEnfant2 />
</NoeudParent>
Voilà mon code:
Dim
xmlElement
As System.Xml.XmlElement = mStructuredDatasXmlDoc.CreateElement("NoeudEnfant")
mParentNode.AppendChild(xmlElement) ' mParentNode est le noeud parent (NoeudParent) sur je voudrais ajouter le noeud enfant
xmlDoc.Save(path
)
' Save xmlDocument
gregory__forel
Messages postés36Date d'inscriptionlundi 18 juillet 2005StatutMembreDernière intervention18 juillet 2008 18 juil. 2008 à 14:45
Salut Kevin, et merci pour ta réponse. Ton exemple fonctionne parfaitement lorsque toutes les opérations sont effectuées à la suite, on crée NoeudEnfant
et NoeudEnfant 2
et on sauve le projet. Cela donne effectivement le bon résultat.
Le problème, c'est que je ne crée pas NoeudEnfant
et NoeudEnfant 2
au même moment. C'est l'utilisateur du programme qui les ajoute au fur et à mesure.
Donc si je fais:
Dim xmlElement
As System.Xml.XmlElement = mStructuredDatasXmlDoc.CreateElement("NoeudEnfant")
mParentNode.AppendChild(xmlElement)
je sauve le projet, ca me donne:
<NoeudParent>
<NoeudEnfant />
</NoeudParent>
Si je veux maintenant ajouter un NoeudEnfant 2
à NoeudEnfant
, je n'arrive pas à obtenir le bon résultat, et le programme recommence à écrire les noeud l'un en dessous de l'autre.
<NoeudParent>
<NoeudEnfant />
<NoeudEnfant2 />
</NoeudParent>
Est-il possible de créer NoeudEnfant
directement comme ca ?
<NoeudParent>
<NoeudEnfant>
</NoeudEnfant>
</NoeudParent>
Kevin.Ory
Messages postés840Date d'inscriptionmercredi 22 octobre 2003StatutMembreDernière intervention 7 janvier 200911 18 juil. 2008 à 18:20
Ouais et ça fonctionne? Ca m'étonne fortement, car au niveau XML, ceci :
<NoeudParent>
<NoeudEnfant />
</NoeudParent>
et cela :
<NoeudParent>
<NoeudEnfant>
</NoeudEnfant>
</NoeudParent>
est exactement la même chose. .NET choisit la 1ère solution pour alléger le poid du fichier XML (et la lisibilité), mais il gère les 2 solutions de la même manière (au niveau de la lecture / modification).
"Si je veux maintenant ajouter un NoeudEnfant 2
à NoeudEnfant
, je n'arrive pas à obtenir le bon résultat, et le programme recommence à écrire les noeud l'un en dessous de l'autre."
<NoeudParent>
<NoeudEnfant />
<NoeudEnfant2 />
</NoeudParent>
Ce que j'en dis, c'est que dans ce cas tu ajoute ton NoeudEnfant2 à NoeudParent et non à NoeudEnfant.
Il faut avant tout récupérer le noeud enfant, de cette façon. Voici un exemple de code:
Un formulaire avec 2 boutons. Form_Load va créer un document XML avec le noeud parent et un noeud enfant NoeudEnfant. Button1_Click va afficher le document XML dans la console, Button2_Click va ajouter un sous-enfant (NoeudEnfant2) à l'enfant NoeudEnfant
PrivateSub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) HandlesMyBase.Load
' Créer le document XML
mStructuredDatasXmlDoc.LoadXml("<?xml version=""1.0"" encoding=""utf-8""?><NoeudParent></NoeudParent>")
' Récupérer le noeud parentDim mParentNode As Xml.XmlElement = mStructuredDatasXmlDoc.DocumentElement
' Ajouter un noeud enfantDim mChildNode As Xml.XmlElement = mStructuredDatasXmlDoc.CreateElement("NoeudEnfant")
mParentNode.AppendChild(mChildNode)
EndSub
PrivateSub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
' Ajouter un sous-noeud au noeud enfant
' Récupérer le noeud enfantDim mChildNode As Xml.XmlElement = mStructuredDatasXmlDoc.DocumentElement.ChildNodes(0)
' Ajouter un sous-noeud à l'élément enfantDim mSubChildNode As Xml.XmlElement = mStructuredDatasXmlDoc.CreateElement("NoeudEnfant2")
mChildNode.AppendChild(mSubChildNode)
EndSub
PrivateSub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
' Afficher le document XML dans la console
mStructuredDatasXmlDoc.Save(Console.Out)
EndSub
Après quelques cliques sur Button2, ça donne ceci:
Kevin.Ory
Messages postés840Date d'inscriptionmercredi 22 octobre 2003StatutMembreDernière intervention 7 janvier 200911 18 juil. 2008 à 18:28
Mouais, pas fameux la mise en page du code, le revoici:
Private mStructuredDatasXmlDoc As New Xml.XmlDocument
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' Créer le document XML
mStructuredDatasXmlDoc.LoadXml("<?xml version=""1.0"" encoding=""utf-8""?><NoeudParent></NoeudParent>")
' Récupérer le noeud parent
Dim mParentNode As Xml.XmlElement = mStructuredDatasXmlDoc.DocumentElement
' Ajouter un noeud enfant
Dim mChildNode As Xml.XmlElement = mStructuredDatasXmlDoc.CreateElement("NoeudEnfant")
mParentNode.AppendChild(mChildNode)
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
' Ajouter un sous-noeud au noeud enfant
' Récupérer le noeud enfant
Dim mChildNode As Xml.XmlElement = mStructuredDatasXmlDoc.DocumentElement.ChildNodes(0)
' Ajouter un sous-noeud à l'élément enfant
Dim mSubChildNode As Xml.XmlElement = mStructuredDatasXmlDoc.CreateElement("NoeudEnfant2")
mChildNode.AppendChild(mSubChildNode)
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click