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

C# Discussion :

[XPath] Sauvegarde du XML.


Sujet :

C#

  1. #1
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut [XPath] Sauvegarde du XML.
    Bonjour, me voila avec un nouveau problème, j'ai la ligne XML suivante :
    <value><![CDATA[<Values:boolean type="boolean" xmlns:Values="Values.xsd"><Values:value>false</Values:value></Values:boolean>
    ]]></value>
    Avec le code suivant je récupère la valeur de la ligne et je la modifie et je sauvegarde le fichier XML :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Iterator = xPathNav.Select(xPathNav.Compile("/campaignloader/campaign/parameter/parameter/parameter/value"));
                Iterator.MoveNext();
                //Console.WriteLine(GetValueToSet(Iterator.Current.Value, "!!!!!Valeur Modifié!!!!!"));
                Iterator.Current.SetValue(GetValueToSet(Iterator.Current.Value, "!!!!!Valeur Modifié!!!!!"));
                xPathDoc.Save(CurrentPath);
    La fonction appelé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
    private string GetValueToSet(string OriginalValue, string NewValue)
            {
                string[] valuesplit;
                string ValueToModify = "";
                char[] sep = new char[2];
                sep[0] = '<';
                sep[1] = '>';
     
                valuesplit = OriginalValue.Trim().Split(sep);
                foreach (string value in valuesplit)
                {
                    if (value.Trim() != "" && !value.Trim().StartsWith("Value") && !value.Trim().StartsWith("/Value"))
                    {
                        ValueToModify = value.Trim();
                    }
                }
     
                return "<![CDATA[" + OriginalValue.Replace(ValueToModify, NewValue) + "]]>" ;
            }
    Donc lorsque je sauvegarde, j'obtiens ceci dans mon fichier :
    <value>&lt;![CDATA[&lt;Values:boolean type="boolean" xmlns:Values="Values.xsd"&gt;&lt;Values:value&gt;!!!!!Valeur Modifié!!!!!&lt;/Values:value&gt;&lt;/Values:boolean&gt;
    ]]&gt;</value>
    Alors que si je décommente la ligne pour afficher sur la console, j'obtiens bien :
    <![CDATA[<Values:boolean type="boolean" xmlns:Values="Values.xsd"><Values:value>!!!!!Valeur Modifié!!!!!</Values:value></Values:boolean>
    ]]>
    Je suis un peu perplexe, et je n'ai pas trouvé d'information concernant ce problème sur le net pour l'instant.

    Vais je devoir me passer d'XPath et éditer le fichier comme un fichier texte ???
    Cela serait vraiment con

  2. #2
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Afin de faire avancer le tout, j'ai essayé ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Iterator = xPathNav.Select(xPathNav.Compile("/campaignloader/campaign/parameter/parameter/parameter/value"));
                Iterator.MoveNext();
                string temp = GetValueToSet(Iterator.Current.Value, "!!!!!Valeur Modifié!!!!!");
                Console.WriteLine(temp);
                StreamWriter sw = File.CreateText(@"c:\temp\temp.txt");
                sw.WriteLine(temp);
                sw.Flush();
                sw.Close();
                StreamReader sr = File.OpenText(@"c:\temp\temp.txt");
                Iterator.Current.SetValue(sr.ReadLine());
                sr.Close();
                xPathDoc.Save(CurrentPath);
                //Iterator.Current.SetValue(GetValueToSet(Iterator.Current.Value, "!!!!!Valeur Modifié!!!!!"));
                //xPathDoc.Save(CurrentPath);
    Cela ne change rien au problème !!!! je vais le b%*§& ce soft de m~&¤£ !!!!

  3. #3
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Points : 6 334
    Points
    6 334
    Par défaut
    Si tu fais un AppendChild() sur ton noeud, tu récupères un XmlWriter.
    Et en utilisant WriteCData, tu devrais pouvoir arriver à tes fins.

  4. #4
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Merci avec ce code là cela marche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Iterator = xPathNav.Select(xPathNav.Compile("/campaignloader/campaign/parameter/parameter/parameter/value"));
                Iterator.MoveNext();
                string temp = GetValueToSet(Iterator.Current.Value, "!!!!!Valeur Modifié!!!!!");
                //Console.WriteLine(temp);
                Iterator.Current.SetValue("");
                XmlWriter xr = Iterator.Current.AppendChild();
                xr.WriteCData(temp);
                xr.Flush();
                xr.Close();
                xPathDoc.Save(CurrentPath);
    Je ne m'attendais pas à ce que le SetValue fasse autre chose que de la copie de texte !!!
    Du coup je n'avais pas pensé à chercher une autre fonction car je mettais en doute le save.

  5. #5
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Points : 6 334
    Points
    6 334
    Par défaut
    Citation Envoyé par ced600 Voir le message
    Merci avec ce code là cela marche
    Cool

    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué

  6. #6
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut

  7. #7
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Points : 6 334
    Points
    6 334
    Par défaut
    Pour faire du traitement XML simple, le framework est bien fait, mais pour ce genre de problème, rien n'est moins intuitif que la solution trouvée aujourd'hui...
    C'est assez paradoxal qu'une action aussi simple en apparence puisse mener à quelquechose d'aussi... tordu.

    Enfin, ça doit être ça qui rend le travail intéressant

  8. #8
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Citation Envoyé par SaumonAgile Voir le message
    Pour faire du traitement XML simple, le framework est bien fait, mais pour ce genre de problème, rien n'est moins intuitif que la solution trouvée aujourd'hui...
    C'est assez paradoxal qu'une action aussi simple en apparence puisse mener à quelquechose d'aussi... tordu.

    Enfin, ça doit être ça qui rend le travail intéressant
    lol
    J'étais en train de me demander (avant d'avoir la solution), si je n'allais pas tout simple ouvrir le fichier xml comme un fichier texte et me faire une petite focntion qui modifie mon fichier à l'aide des méthodes de string.
    Bref me faire un paseur txt de mon fichier xml

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

Discussions similaires

  1. Que choisir pour gérer les sauvegardes : fichiers XML ou base de données ?
    Par Invité dans le forum Développement 2D, 3D et Jeux
    Réponses: 11
    Dernier message: 14/06/2007, 11h58
  2. [XPATH] Split en XML
    Par aokiseiichiro dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 10/05/2007, 16h51
  3. [XPATH] Evaluer une expression xpath dans un xml
    Par antigone dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 29/01/2007, 17h21
  4. [XML] [PHP] Sauvegarde fichier xml
    Par ribrok dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 11/10/2005, 16h58
  5. [DOM XML] Sauvegarde fichier xml
    Par ribrok dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 11/10/2005, 14h49

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