bastien27100
Messages postés31Date d'inscriptionmardi 18 mai 2010StatutMembreDernière intervention 8 juin 2011
-
24 juin 2010 à 14:05
bastien27100
Messages postés31Date d'inscriptionmardi 18 mai 2010StatutMembreDernière intervention 8 juin 2011
-
25 juin 2010 à 13:48
Bonjour,
voici mon fichier xml nommée "settings.xml" :
<Ceri>
1
<Titre>TEXTE A NE PAS MODIFIER</Titre> 'exemple : je ne veut pas Modifier le contenu De Titre
<Categories>1 Organisation</Categories>
<Theme>1 Compétences </Theme>
<Desc>1 info</Desc>
<Solution>1 logiciel</Solution>
2
<Titre>TEXTE A MODIFIER</Titre> 'exemple : je veut Modifier le contenu De Titre
<Categories>2 Organisation</Categories>
<Theme>2 Compétences </Theme>
<Desc>2 excel</Desc>
<Solution>2 def</Solution>
</Ceri>
mon code :
Dim doc As XmlDocument = New XmlDocument()
doc.Load("settings.xml")
Dim book As XmlNode
Dim nodeList As XmlNodeList
Dim root As XmlNode = doc.DocumentElement
nodeList = root.SelectNodes("/Ceri/Titre")' modifie toutes les balises Titre
'Change le titre.
For Each book In nodeList
book.LastChild.InnerText = Form1.Label12.Text + 1 & " " & TXT_BOX4.Text
Next
doc.Save("settings.xml")
End If
Mon problème : mon code modifie le contenu de toutes mes balises portant le même nom, Titre dans cet exemple.
ce que je souhaite : pouvoir Modifier le Titre que je désire sans toucher aux autres.
comment : ???? peut être avec l'index, ou parce qu'il sont charger et sélectionnable dans une listbox, et sont afficher selon la sélection dans des labels.
ce que j'ai essayer : nodeList root.SelectNodes("/Ceri/Titre" Form1.Label7.Text)
nodeList root.SelectNodes("/Ceri/Titre" Form1.Listbox.SelectedItem)
nodeList root.SelectNodes("/Ceri/Titre" Form1.Listbox.SelectedIndex)
cs_christoni
Messages postés140Date d'inscriptionmardi 25 novembre 2003StatutMembreDernière intervention 1 novembre 20107 24 juin 2010 à 21:40
Bonsoir,
ceci en relation avec ton post précédent.
Je vois mal comment recupérer un noeud précis, alors qu'ils peuvent être nombreux à avoir le même nom et tous sur le même plan.
Je serais à ta place, bien que je ne vois cela que de l'extérieur, en premier je structurerais mon fichier xml, genre :
Pour ce faire j'enregistrerais de la façon suivante :
(C'est en dur, pour voir)
Le but est de créer des groupes "Article"
Private Sub BT_ENREG_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_ENREG.Click
Dim doc As New XmlDocument()
doc.Load("settings.xml")
'*** Création du chemin menant à l'élément "racine", pour placer les données
Dim xmlCeri As XmlElement = CType(doc.SelectSingleNode("./Ceri"), XmlElement)
Dim xmlArticle As XmlElement
xmlArticle = doc.CreateElement("Article")
xmlArticle.InnerText = 10 'Form1.Label12.Text + 1
xmlCeri.AppendChild(xmlArticle)
Dim xmlTitre As XmlElement
xmlTitre = doc.CreateElement("Titre")
xmlTitre.InnerText = "VB.NET"
xmlArticle.AppendChild(xmlTitre)
doc.Save("settings.xml")
'Etc .......
Dim xmlSolution As XmlElement
xmlSolution = doc.CreateElement("Solution")
xmlSolution.InnerText = "OK"
xmlArticle.AppendChild(xmlSolution)
doc.Save("settings.xml")
End Sub
Évidemment, il faudra modifier l'affichage dans les listBox :
Private Sub btnListBaliIdent_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnListBaliIdent.Click
listBalisesIdentiques("settings.xml", "/Ceri/Article/Titre", ListBox1)
listBalisesIdentiques("settings.xml", "/Ceri/Article/Categories", ListBox2)
'etc...
End Sub
Ensuite, sur le form1, les listbox donneront la position de la sélection qui est aussi celle du noeud dans le xml, sauf si il y a tri.
Public posiY As Integer
Private Sub ListBox2_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox2.SelectedIndexChanged
posiY = ListBox2.SelectedIndex + 1
End Sub
Enfin l'enregistrement.
Ici on utilise Linq, je n'ai pas trouvé l'équivalent xPath.
Le soucis c'est que, sauf erreur, ce n'est supporté (sauf faire d'énormes bidouilles) qu'à partir de vs 2008.
Private Sub BT_MODIF_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_MODIF.Click
Dim testCfg As XElement = XElement.Load("settings.xml")
Dim noeud As XElement testCfg.XPathSelectElement("Article[position() " & posiY & "]/Titre")
noeud.Value = "Bonjour" 'TXT_BOX4.Text
testCfg.Save("settings.xml")
End Sub
C'est toujours en dur, il faut tester avec tes textbox,radioboutons etc... pour voir si ça fonctionne.
bastien27100
Messages postés31Date d'inscriptionmardi 18 mai 2010StatutMembreDernière intervention 8 juin 2011 25 juin 2010 à 13:48
encore une fois merci à toi la modification particulière marche très bien
il me reste un petit problème, quand je créer une fiche avec cette nouvelle méthode d'écriture, elle arrive bien dans mon fichier xml, mais n'est pas charger dans mes listbox à cause de ceci :xmlns qui s'introduit dans mes balises :
quand je les supprimes directement de mon fichier xml, ma listbox se charge à nouveau, mais j'aimerai qu'il n'aparaissent pas du tout pour charger mes listbox correctement, existe t'il un moyen pour quelles n'apparaissent pas dans mon fichier?
encore merci de m'accorder du temps pour me venir en aide