IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

[VB.NET] [XML] Modification d'une valeur


Sujet :

Windows Forms

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2004
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 16
    Points : 12
    Points
    12
    Par défaut [VB.NET] [XML] Modification d'une valeur
    bonjour,
    j'ai le fichier xml suivant (enfin une partie)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    - <Cas>
    - <Collection Object="Concept" Name="Concept">
    - <Concept multiple="false" type="Données Démographiques" utileConclusion="non" ID="1">
    - <!--  
      --> 
    - <Name>
      <ShortName>CoDF2139200214394074599</ShortName> 
      <LongName>Poids</LongName> 
      <UName>Poids</UName> 
      </Name>
    - <Attribut illustration="">
    - <!--  
      --> 
    - <Name>
      <ShortName>AtDF21392002143940745100</ShortName> 
      <LongName>kg</LongName> 
      <UName>PoidsEnKg</UName> 
      </Name>
    - <Value text="70" value="70">
      <input max="300" maxlength="5" min="30" name="AtDF21392002143940745100" size="6" valeurAbandon="" value="70" varType="num" /> 
      </Value>
      <Question>Quel est le poids en kg de votre patient</Question> 
      </Attribut>
      </Concept>
    j'ai une collection avec un nom de variable et sa valeur.
    je lis le fichier et lorsque je trouve un UName dont la valeur correspond à un nom de variable de ma collection, (par exemple <UName>PoidsEnKg</UName> et j'ai PoidsEnKg dans ma collection) je veux pouvoir aller modifier le 70 de <Value text="70" value="70"> par la valeur que j'ai dans ma collection
    merci d'avance

  2. #2
    Membre à l'essai
    Inscrit en
    Juillet 2004
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    personne n'a une solution pour faire cette manipulation ?

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Août 2002
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 83
    Points : 107
    Points
    107
    Par défaut
    Salut,

    Ci-joint un exemple qui devrait fonctionner
    (en c#)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    // tu charges ton document - a.xml
    XmlDocument d = new XmlDocument();
    d.Load(@"F:\a.xml");
    // Position sur la racine du XML
    XmlNode root = d.DocumentElement;
    // Tu recherches les noeuds voulus - Recherche de tout les balises UName
    // dont la valeur est "test"
    string sXPath = @"descendant::UName[text()='test']"; 
    XmlNodeList oList = root.SelectNodes(sXPath); 
    for (int i=0;i<oList.Count;i++)
    {
            oList[i].InnerText ="Nouveau";
    }
    // Tu sauvegardes les modif
    d.Save(@"F:\a.xml");
    A tester ?

  4. #4
    Membre à l'essai
    Inscrit en
    Juillet 2004
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    deux petits problèmes :

    - le noeud Name qui contient le Uname est au même niveau que le noeud Value, donc problème dans ce que tu m'as donné, je modifie la valeur en cours donc je remplace PoidEnKg par ma valeur.

    -peut-on faire une expression XPath paramétrée ? à savoir pouvoir mettre le texte à rechercher dans une variable

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    sXPath = "descendant::UName[text()='PoidsEnKg']"
                    nodelist = noderacine.SelectNodes(sXPath)
    au lieu d'avoir PoidsEnKg, on remplace comme suit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    sXPath = "descendant::UName[text()='var']"
                    nodelist = noderacine.SelectNodes(sXPath)
    var étant une variable mise à jour à chaque bouclage

  5. #5
    Membre à l'essai
    Inscrit en
    Juillet 2004
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    j'ai trouvé la solution pour insérer une variable

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
                    sXPath = "descendant::UName[text()=" + varglif + "]"
    mais je cherche toujours comment modifier la valeur

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Août 2002
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 83
    Points : 107
    Points
    107
    Par défaut
    Salut,

    Je n'ai pas bien compris la structure de ton fichier XML, mais tu pourrais d'inspirer de ce code pour résoudre ton problème.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    string t = "Test";
    string valeur = "5555";
     
    // Charger le document
    XmlDocument d = new XmlDocument();
    d.Load(@"F:\Decharge\a.xml");
    XmlNode root = d.DocumentElement;
    string sXPath = @"descendant::UName[text()='" + t + "']"; 
    XmlNodeList oList = root.SelectNodes(sXPath); 
    for (int i=0;i<oList.Count;i++)
    {
    	// Positionne sur pere du pere du noeud voulu  
    	XmlNode xm = oList[i].ParentNode.ParentNode;
    	// Tu parcours les fils pour trouver balise "Value"
    	// dont le pere est la balise "Attribut"
    	if (xm.Name == "Attribut")
    	{
    		for (int j=0;j<xm.ChildNodes.Count;j++)
    		{
    			if (xm.ChildNodes[j].Name == "Value")
    			{
    			           // Tu modifie l'attribut value par ta valeur
    				xm.ChildNodes[j].Attributes["value"].Value = valeur;
    			}
    		}
    	}
    }
    d.Save(@"F:\Decharge\a.xml");
    En esperant que ceci fonctionne.

  7. #7
    Membre à l'essai
    Inscrit en
    Juillet 2004
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    voici en plus clair mon xml

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
      <?xml version="1.0" encoding="ISO-8859-1" ?> 
    - <Cas>
       - <Collection Object="Concept" Name="Concept">
          - <Concept multiple="false" type="Données Démographiques" utileConclusion="non" ID="1">
             <!--  --> 
                 - <Name>
                        <ShortName>CoDF2139200214394074599</ShortName> 
                        <LongName>Poids</LongName> 
                        <UName>Poids</UName> 
                   </Name>
                 - <Attribut illustration="">
                      <!--  --> 
                        - <Name>
                              <ShortName>AtDF21392002143940745100</ShortName> 
                             <LongName>kg</LongName> 
                             <UName>PoidsEnKg</UName> 
                          </Name>
                       - <Value text="70" value="70">
                             <input max="300" maxlength="5" min="30" name="AtDF21392002143940745100" size="6" valeurAbandon="" value="70" varType="num" /> 
                         </Value>
                         <Question>Quel est le poids en kg de votre patient</Question> 
                   </Attribut>
          </Concept>
       </Collection>
     </Cas>

  8. #8
    Membre à l'essai
    Inscrit en
    Juillet 2004
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    Le code suivant ne marche que pour deux cas sur trois, la première variable ne donne rien. as-tu une idée ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    If System.IO.File.Exists(Globales.racinedossiermodele & "\" & guide & ".xml") Then
                Dim xmldocmodele As New XmlDocument
                xmldocmodele.Load(Globales.racinedossiermodele & "\" & guide & ".xml")
                Dim noderacine As XmlNode
                noderacine = xmldocmodele.DocumentElement
                Dim nodelist As XmlNodeList
                Dim nodevar As XmlNode
                Dim Cnewglif As New gliffinal
                Dim sXPath As String
                For Each Cnewglif In Collectiongliffinal.Values
                    Dim varglif = Cnewglif.nomVarGlif
                    sXPath = "descendant::UName[text()='" + varglif + "']"
                    nodelist = noderacine.SelectNodes(sXPath)
                    Dim i As Integer
                    For i = 0 To nodelist.Count - 1
                        Dim xm As XmlNode
                        xm = nodelist(i).ParentNode.ParentNode
                        If xm.Name = "Attribut" Then
                            Dim j As Integer
                            For j = 0 To xm.ChildNodes.Count - 1
                                If xm.ChildNodes(j).Name = "Value" Then
                                    xm.ChildNodes(j).Attributes("value").Value = Cnewglif.valueGlif
                                End If
                                j = j + 1
                            Next
                        End If
                        i = i + 1
                    Next
                Next
                xmldocmodele.Save(Console.Out)

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Août 2002
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 83
    Points : 107
    Points
    107
    Par défaut
    Je ne suis pas un spécialiste en vb.net, mais je pense que quand tu
    ultilise une boucle FOR, tu ne dois pas incrémenter ta variable.
    L'incrémentation de ta variable est effectuée par l'utilisation du NEXT

    Si tu fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    FOR i = 0 to 10
           print i;
           i = i +1
    NEXT
    tu obtiendras 0,2,4,6,8,10 (tu incrémente ton i de 2 à chaque fois)

    Il faut utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    FOR i = 0 to 10
           print i;
    NEXT
    l'incrémentation du i se fait par l'intermédiaire de NEXT

  10. #10
    Membre à l'essai
    Inscrit en
    Juillet 2004
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    merci beaucoup de ton aide, ça marche


    [Tag
    [Résolu] corrigé par freegreg]
    [Pensez à utiliser le bouton ]

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 02/08/2007, 16h17
  2. Réponses: 7
    Dernier message: 27/04/2007, 10h01
  3. Réponses: 2
    Dernier message: 17/08/2005, 14h40
  4. [VB.Net]Procédure Stocké retournant une valeur
    Par waldo2188 dans le forum ASP.NET
    Réponses: 2
    Dernier message: 03/05/2005, 12h56
  5. [VB.NET] copier coller d'une valeur
    Par mic56 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 08/06/2004, 11h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo