Récupérer contenu d'une balise xml portant le même nom que d'autres [Résolu]

Messages postés
31
Date d'inscription
mardi 18 mai 2010
Dernière intervention
8 juin 2011
- 24 juin 2010 à 14:05 - Dernière réponse :
Messages postés
31
Date d'inscription
mardi 18 mai 2010
Derniè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)

résultat : aucune modification ou tous modifier

voilà, merci d'avance de me venir en aide
Afficher la suite 

Votre réponse

2 réponses

Meilleure réponse
Messages postés
140
Date d'inscription
mardi 25 novembre 2003
Dernière intervention
1 novembre 2010
- 24 juin 2010 à 21:40
3
Merci
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 :
<?xml version="1.0" encoding="utf-8"?>
<Ceri>
  1
    <Titre>ffffffffffffffffff</Titre>
    <Categories>Bureautique</Categories>
    <Logiciel>Word</Logiciel>
    <Desc>logiciel</Desc>
    <Solution>windows</Solution>
  3
    <Titre>VB</Titre>
    <Categories>VB</Categories>
    <Marque.CN>VB</Marque.CN>
    <Desc>VB</Desc>
    <Solution>VB</Solution>
  2
    <Titre>bibi</Titre>
    <Categories>CN</Categories>
    <Marque.CN>Num</Marque.CN>
    <Desc>tel</Desc>
    <Solution>marque</Solution>
</Ceri>

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.

Merci cs_christoni 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 88 internautes ce mois-ci

Commenter la réponse de cs_christoni
Messages postés
31
Date d'inscription
mardi 18 mai 2010
Dernière intervention
8 juin 2011
- 25 juin 2010 à 13:48
0
Merci
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 :


<Num xmlns="5">5</Num>
<Titre xmlns="5">sa marche</Titre>
<Solution xmlns="5">merci</Solution>
<Desc xmlns="5">à</Desc>
<Marque.Variateur xmlns="5">christoni</Marque.Variateur>
<Categories xmlns="4">Variateurs</Categories>


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
Commenter la réponse de bastien27100

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.