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

Discussion :

Questions d'un novice sur le trio « infernal » Qt-XML-DOM

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de VivienD
    Homme Profil pro
    Développeur logiciel
    Inscrit en
    Octobre 2009
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur logiciel
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 523
    Par défaut Questions d'un novice sur le trio « infernal » Qt-XML-DOM
    Bonjour,

    Dans le cadre de mon projet universitaire et des mes projets personnels je suis amené à utiliser le format XML. Pour le moment je me contente de la méthode DOM mais après avoir lu un certain nombre de tutoriels et après une partie de la documentation de Qt quelques interrogations subsistent. Voici la première fournée de questions.

    [1] - Comment puis-je décortiquer le document XML ci-dessous, si, du moins, il est possible que je rencontre un tel document?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?xml version="1.0" encoding="UTF-8"?>
    <root>
        J&39ai mangé une côtelette. Comme on a utilisé trop d&39huile pour le cuire, je l&39ai trouvé <b>gras</b>.<br />
        Le reste du texte...
    </root>
    Avouez que la qualité de ce texte rendrait envieux les meilleurs romanciers.

    [2] - Peut-on gérer les fichiers DTD avec Qt? Peut-on vérifier grâce à eux si les arbres XML qui les utilisent sont valides?

    Merci d'avance pour votre aide.

    À plus!

    PS: Si mon exemple de document XML est faux, n'hésitez pas à m'en faire part.

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2009
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 009
    Par défaut
    [1] Ce n'est pas du XML donc logiquement non. (hors balise CDATA, '&' est un caractère spécial que tu ne peux pas utiliser comme ça). Sinon au niveau structurel, tu as un QDomElement (root) et à l'intérieur, text().

    [2] Non (pas que je sâche), il faut faire des validations par schéma XML.

  3. #3
    Membre éclairé
    Avatar de VivienD
    Homme Profil pro
    Développeur logiciel
    Inscrit en
    Octobre 2009
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur logiciel
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 523
    Par défaut
    Citation Envoyé par Troudhyl Voir le message
    [1] Ce n'est pas du XML donc logiquement non. (hors balise CDATA, '&' est un caractère spécial que tu ne peux pas utiliser comme ça).
    Comment corriger ce document pour que ce soit du bon XML? J'avais utilisé &39 pour remplacer l'apostrophe parce que j'avais lu, je ne sais plus où, que ce caractère pouvait poser problème.

    Citation Envoyé par Troudhyl Voir le message
    Sinon au niveau structurel, tu as un QDomElement (root) et à l'intérieur, text().
    Est-ce que les balises <b></b> et <br /> ne vont pas gêner l'analyse?

    Citation Envoyé par Troudhyl Voir le message
    [2] Non (pas que je sâche), il faut faire des validations par schéma XML.
    Donc il va falloir que je trouve un programme tiers... ou que je le code moi-même.

  4. #4
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2009
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 009
    Par défaut
    Y'a un point-virgule dans les caractères spéciaux HTML. &39; Mais de toute façon là c'est du XML, et ' ne pose pas de problème.

    Pour ta seconde question, voir la doc : http://qt-project.org/doc/qt-4.8/qdomelement.html#text

  5. #5
    Membre éclairé
    Avatar de VivienD
    Homme Profil pro
    Développeur logiciel
    Inscrit en
    Octobre 2009
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur logiciel
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 523
    Par défaut
    Citation Envoyé par Troudhyl Voir le message
    Y'a un point-virgule dans les caractères spéciaux HTML. &39; Mais de toute façon là c'est du XML, et ' ne pose pas de problème.[...]
    Pourquoi faire simple quand on peut faire compliqué...

    J'ai corrigé en conséquence l'exemple:
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?xml version="1.0" encoding="UTF-8"?>
    <root>
        J'ai mangé une côtelette. Comme on a utilisé trop d'huile pour le cuire, je l'ai trouvé <b>gras</b>.<br />
        Le reste du texte...
    </root>

    J'ai écrit rapidement un petit programme pour afficher le contenu de l'élément-racine dans un QLabel. Le voici:
    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
    #include <QApplication>
    #include <QLabel>
    #include <QDomDocument>
    #include <QFile>
     
    int main(int argc, char* argv[])
    {
        QApplication a(argc, argv);
     
        QFile f(a.applicationDirPath() + QString("/test.xml"));
        QDomDocument d;
        f.open(QFile::ReadOnly | QFile::Text);
        d.setContent(&f, false);
        f.close();
     
        QLabel l(d.documentElement().text());
        l.setGeometry(100,100,500,200);
        l.show();
     
        return a.exec();
    }
    Le document test.xml n'est autre que l'exemple que je viens de corriger.
    Suite à la lecture de la documentation (merci pour le lien), j'ai supposé que les balises <b> et </b> allaient être omises; et je suppose bien. En revanche j'ai eu deux surprises: d'une part la balise <br /> n'a pas été omise (tant mieux !); d'autre part les caractères accentués sont mal affichés, comme dans la capture d'écran ci-joint. Ce qui m'amène aux deux questions suivantes.

    [3] - Comment faire pour que des balises comme <b> et </b> ne soient pas omises lors de la lecture?

    [4] - Comment faire pour que mes caractères accentués s'affichent correctement?

    PS: Mon OS est Windows7.

    EDIT: Une première solution pour mon problème exposé dans la question 4 serait de modifier <?xml version="1.0" encoding="UTF-8"?> par <?xml version="1.0" encoding="ISO-8859-1"?> dans mon exemple XML. Toutefois, si j'ai à faire avec des documents XML ne pouvant accepter que l'encodage UTF-8 (pour une raison x ou y) je ne saurai pas comment me dépatouiller...
    Images attachées Images attachées  

  6. #6
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2009
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 009
    Par défaut
    Alors, c'est là que ça se complique car il faut bien définir ce que tu veux. Donc en fait, pour toi <b></b> et <br /> ne font pas partie du document XML, mais sont de simples données (HTML) pour l'affichage. Dans ce cas, comme ce sont des données avec des caractères spéciaux, tu as deux solutions :
    - Tout mettre dans un CDATA :
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?xml version="1.0" encoding="UTF-8"?>
    <root>
        <![CDATA[J'ai mangé une côtelette. Comme on a utilisé trop d'huile pour le cuire, je l'ai trouvé <b>gras</b>.<br />
        Le reste du texte...]]>
    </root>
    - Echapper les caractères spéciaux (au passage le ' c'est ', il manquait le #) : < devient &lt; (lt pour lower than) et > devient &gt; (greater than).
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?xml version="1.0" encoding="UTF-8"?>
    <root>
        J'ai mangé une côtelette. Comme on a utilisé trop d'huile pour le cuire, je l'ai trouvé &lt;b&gt;gras&lt;/b&gt;.&lt;br /&gt;
        Le reste du texte...
    </root>

    Et sinon pour les accents foireux c'est que ton test.xml n'est pas encodé en UTF-8 (Convertir en UTF-8 dans Notepad++ - je te conseille aussi le plugin XML Tools).

Discussions similaires

  1. Réponses: 4
    Dernier message: 31/01/2012, 17h36
  2. [XL-2007] Question de novice sur l'aide disponible
    Par ..ooooOö.. dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 07/12/2011, 18h48
  3. Questions d'un novice sur les « infâmes » pointeurs
    Par VivienD dans le forum Débuter
    Réponses: 81
    Dernier message: 25/08/2011, 19h09
  4. Question d'un novice sur le RewriteRule
    Par moog dans le forum Apache
    Réponses: 2
    Dernier message: 25/12/2010, 19h21
  5. question (peut-être idiote) sur les vues
    Par LadyArwen dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 26/03/2003, 10h35

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