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

Qt Discussion :

Modifier le contenu d'un fichier XML


Sujet :

Qt

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2011
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2011
    Messages : 29
    Points : 31
    Points
    31
    Par défaut Modifier le contenu d'un fichier XML
    Salut à tout le monde,
    Voilà je veux modifier le contenu d'un fichier XML et le problème c'est qu'au lieu d'avoir un fichier XML modifié, le résultat est:
    le contenu de l'ancien fichier XML + le contenu du nouveau fichier XML

    je commence avec :
    <racine>
    <balise1></balise1>
    <balise2></balise2>
    <balise3></balise3>
    </racine>

    et le résultat est:

    <racine>
    <balise1></balise1>
    <balise2></balise2>
    <balise3></balise3>
    </racine>
    <racine>
    <balise1></balise1>
    <balise2></balise2>
    <balise3></balise3>
    <balise4></balise4>
    </racine>


    alors que ce que je veux avoir c'est seulement la 2eme partie (ajouter la balise4):

    <racine>
    <balise1></balise1>
    <balise2></balise2>
    <balise3></balise3>
    <balise4></balise4>
    </racine>


    Voici un aperçu de mon code (j'ai ommis la partie de création du noeud et de son insertion puisqu'elle marche correctement):


    QTextStream out;
    QString nomXML = "textures.xml";

    QDomDocument doc("racine");
    QFile file(nomXML);
    out.setDevice(&file);

    if(QDir().exists(textDir))
    return -1;

    if (!file.open(QIODevice::ReadWrite))
    return -2; // pas de droit de lecture ou d'écriture

    if (!doc.setContent(&file))
    {
    file.close();
    return -3; // fichier pas ouvert correctement
    }

    QDomElement root = doc.documentElement();
    if( root.tagName() != "racine" )
    return -4;

    //***************
    // ici je crée les noeuds, le parcours l'XML et je fais un appendChild pour balise4
    //***************


    // insertion en début de document de <?xml version="1.0" ?>
    QDomNode noeud = doc.createProcessingInstruction("xml","version=\"1.0\"");
    doc.insertBefore(noeud,doc.firstChild());
    // sauvegarde dans le flux (deux espaces de décalage dans l'arborescence)


    doc.save(out,2);
    file.close();
    Je crois que l'a faute est faite lors de l'enregistrement mais je vois pas comment la corriger, j'ai essayé de faire:
    doc.clear();
    doc.save(out,2);
    file.close();
    return 0;

    pour effacer le contenu avant d'enregistrer mais ça ne donne rien du tout, au contraire ça ne change même pas le fichier d'origine
    Veuillez m'aider s'il vous plait

  2. #2
    Rédacteur

    Avatar de johnlamericain
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    3 742
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 3 742
    Points : 8 140
    Points
    8 140
    Par défaut
    J'ai comme l'impression qu'il manque du code là, celui qui créer actuellement les noeuds, etc.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2011
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2011
    Messages : 29
    Points : 31
    Points
    31
    Par défaut
    Citation Envoyé par johnlamericain Voir le message
    J'ai comme l'impression qu'il manque du code là, celui qui créer actuellement les noeuds, etc.
    Voici le code complet


    # include <QtGui>
    # include <qdom.h>

    int ajouterBaliseXML();


    int main(int argc,char** argv){

    QApplication app(argc,argv);


    ajouterBaliseXML();

    return app.exec();
    }



    int ajouterBaliseXML(){


    QTextStream out;
    QString nomXML = "fichier.xml";

    QDomDocument doc("racine");
    QFile file(nomXML);
    out.setDevice(&file);


    if (!file.open(QIODevice::ReadWrite))
    return -2; // pas de droit de lecture ou d'écriture

    if (!doc.setContent(&file))
    {
    file.close();
    return -3; // fichier pas ouvert correctement
    }

    QDomElement root = doc.documentElement();
    if( root.tagName() != "racine" )
    return -4;

    QDomElement balise4 = doc.createElement("balise4");

    root.appendChild(balise4);

    // insertion en début de document de <?xml version="1.0" ?>
    QDomNode noeud = doc.createProcessingInstruction("xml","version=\"1.0\"");
    doc.insertBefore(noeud,doc.firstChild());
    // sauvegarde dans le flux (deux espaces de décalage dans l'arborescence)


    doc.save(out,2);
    file.close();
    return 0;
    }


    Et comme je l'ai indiqué, l'entrée est "fichier.xml":


    <?xml version="1.0"?>
    <racine>
    <balise1></balise1>
    <balise2></balise2>
    <balise3></balise3>
    </racine>

    et le résultat à la fin est :


    <?xml version="1.0"?>
    <racine>
    <balise1></balise1>
    <balise2></balise2>
    <balise3></balise3>
    </racine><?xml version="1.0"?>
    <?xml version='1.0'?>
    <racine>
    <balise1/>
    <balise2/>
    <balise3/>
    <balise4/>
    </racine>

    et merci d'avance

  4. #4
    Rédacteur

    Avatar de johnlamericain
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    3 742
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 3 742
    Points : 8 140
    Points
    8 140
    Par défaut
    Le problème c'est que tu utilises un flux (QTextStream), ce n'est pas comme un fichier ou tu écrases par dessus le contenu actuel, ça lis des données dans l'ordre du flux et ça s’arrête à la fin. Il n'y a pas non plus de moyen d'effacer le flux. Tout ce que tu vas mettre dedans sera toujours ajouté à la fin. Regarde la documentation pour plus de détails.

    Une solution et d'utiliser un autre flux, ou d'écrire directement ton contenu XML (toString()) dans le fichier sans passer par le flux.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2011
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2011
    Messages : 29
    Points : 31
    Points
    31
    Par défaut
    Citation Envoyé par johnlamericain Voir le message
    Le problème c'est que tu utilises un flux (QTextStream), ce n'est pas comme un fichier ou tu écrases par dessus le contenu actuel, ça lis des données dans l'ordre du flux et ça s’arrête à la fin. Il n'y a pas non plus de moyen d'effacer le flux. Tout ce que tu vas mettre dedans sera toujours ajouté à la fin. Regarde la documentation pour plus de détails.

    Une solution et d'utiliser un autre flux, ou d'écrire directement ton contenu XML (toString()) dans le fichier sans passer par le flux.
    Merci beaucoup, je vais essayer de faire comme vous avez dit

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

Discussions similaires

  1. Modifier le contenu d'un fichier XML
    Par Glork dans le forum Android
    Réponses: 14
    Dernier message: 23/12/2013, 21h54
  2. Modifier le contenu d'un fichier XML
    Par khouloudmad dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 04/05/2012, 13h30
  3. Modifier Contenu d'un fichier XML Javascript
    Par missd12 dans le forum XML/XSL et SOAP
    Réponses: 9
    Dernier message: 15/07/2009, 13h31
  4. [DOM] Modifier un noeud dans un fichier XML
    Par erivoil dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 04/01/2007, 12h11
  5. Lire le contenu d'un fichier xml
    Par Invité dans le forum Bibliothèques
    Réponses: 4
    Dernier message: 10/01/2006, 19h13

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