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

XML Discussion :

[Xerces] Erreur de segmentation sur un exemple du tutoriel


Sujet :

XML

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 155
    Points : 45
    Points
    45
    Par défaut [Xerces] Erreur de segmentation sur un exemple du tutoriel
    Bonjour à tous,

    je viens d'installer xerces, je voulais m'entrainer et le premier bout de code que j'essaie me fait un segfault, je ne comprend pas
    si quelqu'un a une idée ...

    merci à vous

    ps : selon le debugger, c'est cette ligne qui coince : XMLString::transcode("Range", tempStr, 99);

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    //
        //  Create a small document tree
        //
     
        {
            XMLCh tempStr[100];
     
            XMLString::transcode("Range", tempStr, 99);
            DOMImplementation* impl = DOMImplementationRegistry::getDOMImplementation(tempStr, 0);
     
            XMLString::transcode("root", tempStr, 99);
            DOMDocument*   doc = impl->createDocument(0, tempStr, 0);
            DOMElement*   root = doc->getDocumentElement();
     
            XMLString::transcode("FirstElement", tempStr, 99);
            DOMElement*   e1 = doc->createElement(tempStr);
            root->appendChild(e1);
     
            XMLString::transcode("SecondElement", tempStr, 99);
            DOMElement*   e2 = doc->createElement(tempStr);
            root->appendChild(e2);
     
            XMLString::transcode("aTextNode", tempStr, 99);
            DOMText*       textNode = doc->createTextNode(tempStr);
            e1->appendChild(textNode);
     
            // optionally, call release() to release the resource associated with the range after done
            DOMRange* range = doc->createRange();
            range->release();
     
            // removedElement is an orphaned node, optionally call release() to release associated resource
            DOMElement* removedElement = root->removeChild(e2);
            removedElement->release();
     
            // no need to release this returned object which is owned by implementation
            XMLString::transcode("*", tempStr, 99);
            DOMNodeList*    nodeList = doc->getElementsByTagName(tempStr);
     
            // done with the document, must call release() to release the entire document resources
            doc->release();
        };

  2. #2
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 618
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 618
    Points : 188 593
    Points
    188 593
    Par défaut




    Le problème ne viendrait-il pas de ta compilation de Xerces ? L'a-t-il bien été avec le même compilateur que ton projet ? (Surtout si l'erreur arrive dès le premier appel à Xerces...).
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 155
    Points : 45
    Points
    45
    Par défaut
    j'ai la version compilée avec gcc 3.4 apparemment (téléchargée sur internet) et mon compilo est gcc 4.1.2
    l'erreur pourrait venir de là ??

  4. #4
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 618
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 618
    Points : 188 593
    Points
    188 593
    Par défaut
    C'est possible si les deux compilateurs ne sont pas binairement compatibles (ce qui n'est en pratique jamais assuré). Dans ce cas, l'un s'attend à trouver les fonctions à l'emplacement X en mémoire et l'autre à l'emplacement Y, d'où erreur.*
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 155
    Points : 45
    Points
    45
    Par défaut
    Citation Envoyé par dourouc05 Voir le message
    C'est possible si les deux compilateurs ne sont pas binairement compatibles (ce qui n'est en pratique jamais assuré). Dans ce cas, l'un s'attend à trouver les fonctions à l'emplacement X en mémoire et l'autre à l'emplacement Y, d'où erreur.*
    j'ai tjs la même erreur

  6. #6
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Points : 1 543
    Points
    1 543
    Par défaut
    Salut,

    Il faut qu'avant le premier appel à une primitive de xerces tu invoques :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                XERCES_CPP_NAMESPACE::XMLPlatformUtils::Initialize()
    Puis qu'éventuellement à la fin tu fasses l'inverse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                XERCES_CPP_NAMESPACE::XMLPlatformUtils::Terminate();
    Si ce n'est pas ça, donne un code complet qui compile et qui reproduise le problème pour pouvoir creuser un peu.

    MAT.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 155
    Points : 45
    Points
    45
    Par défaut
    exactement, je viens de m'en rendre compte moi aussi et ça marche enfin... ça faisait des heures que j'étais dessus*

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 155
    Points : 45
    Points
    45
    Par défaut
    encore une petite question, comment on fait pour écrire l'arbre DOM qu'on vient de former ?? je n'arrete pas de parcourir la doc mais elle n'est pas claire, je ne comprend pas comment elle se lit, c'est tout désordonné je trouve...

  9. #9
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Points : 1 543
    Points
    1 543
    Par défaut
    Tiens tu peux sans doute t'inspirer de ce code, notamment les méthodes document::fill.

    MAT.

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 155
    Points : 45
    Points
    45
    Par défaut
    Merci pour vos réponses

    Comment je peux faire que mon xml en sortie soit bien indenté ?

  11. #11
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Points : 1 543
    Points
    1 543
    Par défaut
    Si c'est xerces 3.x il suffit de faire quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    serializer->getDomConfig()->setParameter( XERCES_CPP_NAMESPACE::XMLUni::fgDOMWRTFormatPrettyPrint, true );
    (Cf. document::write du lien donné précédemment)

    Si c'est xerces 2.x c'est mi-pas possible à moins de faire quelque chose comme le 'beautifier' utilisé toujours dans document::write, parce que le 'pretty print' est complétement foireux dans ces versions de xerces...

    MAT.

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 155
    Points : 45
    Points
    45
    Par défaut
    Citation Envoyé par Mat007 Voir le message
    Si c'est xerces 3.x il suffit de faire quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    serializer->getDomConfig()->setParameter( XERCES_CPP_NAMESPACE::XMLUni::fgDOMWRTFormatPrettyPrint, true );
    (Cf. document::write du lien donné précédemment)

    Si c'est xerces 2.x c'est mi-pas possible à moins de faire quelque chose comme le 'beautifier' utilisé toujours dans document::write, parce que le 'pretty print' est complétement foireux dans ces versions de xerces...

    MAT.
    ça fonctionne merci

    J'ai une autre question.
    Je voudrais enregistrer mon flux xml dans une base de données, dans un champ text. Il faut donc que j'arrive à transformer mon flux xml (DOMElement *root) en string, ou char *. Quelqu'un aurait-il une idée svp ?

    merci à vous

  13. #13
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Points : 1 543
    Points
    1 543
    Par défaut
    Citation Envoyé par _LittleFlea_ Voir le message
    Il faut donc que j'arrive à transformer mon flux xml (DOMElement *root) en string, ou char *. Quelqu'un aurait-il une idée svp ?
    Toujours dans le même code regarde la version de document::fill qui prend un std::string& en paramètre (et non un const std::string&).

    MAT.

Discussions similaires

  1. erreur de segmentation sur affectation champ enum structure
    Par marion5515 dans le forum Débuter
    Réponses: 9
    Dernier message: 24/02/2010, 11h51
  2. Erreur de segmentation sur une concaténation
    Par cypher.sephiroth dans le forum Débuter
    Réponses: 14
    Dernier message: 18/08/2009, 17h42
  3. Erreur de segmentation sur ifstream.close()
    Par tHE_fLAmMinG_mOE dans le forum SL & STL
    Réponses: 4
    Dernier message: 27/01/2009, 14h54
  4. Erreur de segmentation sur une File
    Par hugo1992 dans le forum C
    Réponses: 2
    Dernier message: 22/10/2007, 08h49
  5. Erreur de segmentation sur une chaine en récursif...
    Par laurent_ifips dans le forum C
    Réponses: 12
    Dernier message: 13/12/2005, 16h04

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