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

Langage Delphi Discussion :

TXMLDocument : contient pas de noeud de texte unique


Sujet :

Langage Delphi

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 93
    Points : 35
    Points
    35
    Par défaut TXMLDocument : contient pas de noeud de texte unique
    Salut,
    j'essaie de parser un document xml avec TXMLDocument, plus exactement un fichier Atom.

    qui a ce genre de format :

    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <entry xmlns="http://purl.org/atom/ns#">
      <link href="" rel="service.edit" title="" type="application/atom+xml"/>
      <link href="" rel="related" title="" type="text/html"/>
      <author>
        <name></name>
      </author>
      <issued></issued>
      <modified></modified>
      <content type="application/xhtml+xml" xml:base="" xml:space="preserve">
        <div xmlns="http://www.w3.org/1999/xhtml">ici le texte à parser</div>
      </content>
    </entry>

    J'arrive à trouver la balise entry, puis content mais quand je veux lire ce qu'il y'a à l'intèrieur là je me retrouve avec cette erreur :

    if (test='content') then descrip:=xmlAdresItem.Text;

    >contient pas de noeud de texte unique

    Pige pas pourquoi ? si quelqu'un pouvait m'eclairer

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 93
    Points : 35
    Points
    35
    Par défaut
    Après nombre d'essais, toujours dans l'impasse

  3. #3
    Membre chevronné
    Avatar de Pierre Castelain
    Inscrit en
    Avril 2002
    Messages
    523
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 523
    Points : 1 943
    Points
    1 943
    Par défaut
    Le noeud test ext celui qui s'appelle div, pas content. Il te faut donc descendre un peu plus bas dans la hiérarchie.

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 93
    Points : 35
    Points
    35
    Par défaut
    Ce qui m'etonne, c'est que test ne prend jamais la valeur div

    par contre en ajoutant dans la balise content :

    <content type="application/xhtml+xml" xml:base="" xml:space="preserve">
    <div xmlns="http://www.w3.org/1999/xhtml"><![CDATA[
    texte à parser ]]></div>
    </content>

    Là je prend bien le texte avec le noeud content.

    Est ce qu'il faudrait pas mieux ajouter <![CDATA[ ... ]] , mais dans ce cas va falloir que je trouve un bon tuto

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 93
    Points : 35
    Points
    35
    Par défaut
    En effet t'avais raison, le noeud div permet la lecture, mais j'ai un problème pour lire son contenu.

    si je fais un :
    XMLDocument1.DocumentElement.ChildNodes.FindNode('div');

    ca retourne nil, ca doit pas etre la bonne méthode.
    si je veux aller directement à div, comment faire ?

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 93
    Points : 35
    Points
    35
    Par défaut
    J'ai plus cette erreur mais le contenu de div est vide, voici mon code :

    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
     
     
    if (test='content') then
                    begin
                    test1:=xmlAdresItem.ChildNodes[0].NodeName;
                    if ((test1<>'') and (test1<>'#cdata-section')) then
                        begin
                          attrib:=xmlAdresItem.ChildNodes[test].ChildNodes[test1];  
                          end;
                            if (attrib<>nil) then
                             begin
                               while Assigned(attrib) do
                               begin
                                 test1:=attrib.NodeName;
                                 if (test1='div') then descrip:=attrib.Text;
                                 attrib  := attrib.NextSibling;
                               end;
                            end
                           else
                           descrip:=xmlAdresItem.Text;
                       end;
    descrip='' sais pas pourquoi

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 93
    Points : 35
    Points
    35
    Par défaut
    Je le fait remonter à tout hasard, si quelqu'un pouvait m'expliquer pourquoi je n'arrive pas à chopper le contenu de la balise div.

  8. #8
    Nouveau membre du Club
    Inscrit en
    Avril 2005
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 32
    Points : 25
    Points
    25
    Par défaut
    Citation Envoyé par reg11
    En effet t'avais raison, le noeud div permet la lecture, mais j'ai un problème pour lire son contenu.

    si je fais un :
    XMLDocument1.DocumentElement.ChildNodes.FindNode('div');

    ca retourne nil, ca doit pas etre la bonne méthode.
    si je veux aller directement à div, comment faire ?
    Utilise un IXMLNode et fais le deux étapes :

    Node := XMLDocument1.DocumentElement;
    Node := Node.ChildNodes['content'];
    ...

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 93
    Points : 35
    Points
    35
    Par défaut
    meme en creant des etapes :

    xmlRoot:= XMLDocument1.DocumentElement;
    xmlRoot := xmlRoot.ChildNodes['entry'];
    xmlRoot := xmlRoot.ChildNodes['content'];
    xmlRoot := xmlRoot.ChildNodes['div'];
    descrip:=xmlRoot.Text;

    descrip est toujours vide, à moins que je vire l'attribut, si il n'ya plus que <div> là ca fonctionne mais si <div attribut> marche pas

    De plus si il y'a un texte non formaté dans la balise div, exemple des <br> il prend ca pour un noeud ...

    Comment je peux reecrire les noeuds ou rajouté cdata-section ?

  10. #10
    Nouveau membre du Club
    Inscrit en
    Avril 2005
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 32
    Points : 25
    Points
    25
    Par défaut
    descrip est toujours vide, à moins que je vire l'attribut, si il n'ya plus que <div> là ca fonctionne mais si <div attribut> marche pas Crying or Very sad
    Utilises-tu l'option doNodeAutoIdent = True ? Ca pourrait venir de là...

    Pour les caracère spéciaux '<', '>' et '&', fais bien attention au formatage du texte.

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 93
    Points : 35
    Points
    35
    Par défaut
    Thanks maintenant il reconnait mon div meme avec attributs

    Par contre y'a un moyen pour formater le texte automatiquement ?

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 93
    Points : 35
    Points
    35
    Par défaut
    J'ai trouvé ca :
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemxmlxmlelementclassinnerxmltopic.asp

    Y'a t'il un moyen de pouvoir l'utiliser dans mon projet et dans ce cas, comment y parvenir ?

  13. #13
    Nouveau membre du Club
    Inscrit en
    Avril 2005
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 32
    Points : 25
    Points
    25
    Par défaut
    Citation Envoyé par reg11
    Par contre y'a un moyen pour formater le texte automatiquement ?
    Je n'ai pas trouvé.

    Citation Envoyé par reg11
    J'ai trouvé ca :
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemxmlxmlelementclassinnerxmltopic.asp
    Que veux-tu faire avec ça ?

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 93
    Points : 35
    Points
    35
    Par défaut
    Par contre y'a bien un problème, au niveau des attributs,

    <div rel="http://www.w3.org/1999/xhtml">
    ici le texte a parser
    </div>

    je prends bien le texte

    <div xmlns="http://www.w3.org/1999/xhtml">
    ici le texte a parser
    </div>

    là rien pas de texte ...

    Concernant msdn, y'a une propriété innerxml qui aurait permis d'enlever des balises dans le texte mais j'ai pas trouvé l'equivalent avec xmldocument.

    En fait pour eviter tous ces problèmes de formatage et d'attributs, ca serait d'ajouter :
    <![CDATA ici le texte a parser ]]

    peut etre en manipulant XML pour pouvoir inserer CDATA, mais là je bute, quel serait le meilleur moyen selon toi ?

  15. #15
    Nouveau membre du Club
    Inscrit en
    Avril 2005
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 32
    Points : 25
    Points
    25
    Par défaut
    Salut.
    Je ne comprends pas bien ce que tu veux faire.
    Tu veux juste parser ton fichier ? Dans ce cas, n'utilise pas las propriétés exotiques de TXMLDocument. Il faut juste que la propriété Active soit à True. C'est tout ce dont tu as besoin. Avec ChildNodes et Attributes tu dois pouvoir atteindre toutes les infos dont tu as besoin.

    Si c'est pour faire des choses plus compliquées, là je ne sais pas.

  16. #16
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 93
    Points : 35
    Points
    35
    Par défaut
    J'aimerai que ca soit aussi simple, utiliser ChildNodes et Attributes uniquement mais je dois pouvoir parser differents formats xml, et si dans un document xml, il y'a des caractères speciaux, ou des attributs qui me permettent pas de lire, alors je dois bien chercher à contourner le problème, en reecrivant peut etre le document xml selon le modèle que je désire

  17. #17
    Nouveau membre du Club
    Inscrit en
    Avril 2005
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 32
    Points : 25
    Points
    25
    Par défaut
    e dois pouvoir parser differents formats xml
    tu veux dire, iso machin et uft 8 ?
    si dans un document xml, il y'a des caractères speciaux, ou des attributs qui me permettent pas de lire
    si tu utilise le parser msxml (propriété domvendor), il faut que ton fichier xml, celui que tu lis, soit bien formaté, càd par ex, le caractère 'é' doit s'écrire'é' (http://www.ascii.cl/htmlcodes.htm), enfin c'est le problème que j'ai eu. Ce qui est vraiment bizarre c'est que j'ai des 'é' et que ça ne le dérange pas . Enfin bref.

    Edit : tu as bien ça au début de ton xml ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>

  18. #18
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 93
    Points : 35
    Points
    35
    Par défaut
    Oui, j'ai bien tous les elements sinon je ne pourrais pas lire le fichier xml, j'utilise le parser msxml, quand je dis differents formats c'est pas l'encodage mais des formats derivés du xml comme le RSS 0.9/1.0/2.0/RDF/ATOM qui ont leurs specificités.

    Maintenant niveau accents caractères speciaux, justement en ajoutant Cdata, plus de problème à ce niveau puisque le parser ne l'interprete pas.

    Donc manipuler le fichier xml, ajouter les noeuds ou Cdata, et le tour est joué enfin ma pratique de Delphi se compte en nombre de jours donc dur dur

  19. #19
    Nouveau membre du Club
    Inscrit en
    Avril 2005
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 32
    Points : 25
    Points
    25
    Par défaut
    Utilise une DTD associée à ton XML peut-être...
    Même si ces formats sont dérivés du XML, ils restent du XML. Il y a donc certaines règles syntaxiques à respecter.

  20. #20
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 93
    Points : 35
    Points
    35
    Par défaut
    je vais voir cela, par contre maintenant j'arrive à modifier un noeud en incorporant cdata mais maintenant imaginons qu'il y'ait des balises dans le texte, du html par exemple dès que je vais vouloir integrer cdata, il va y'avoir une erreur ...

    Ca veut dire que si je vais prevenir ce genre d'erreur, il faut que je manipule le xml en string avant pour y ajouter cdtata, c'est dommage qu'il n'y ait pas une propriété qui vire les balises html ca m'eviterait de faire tout ca !

    Et concernant le jeu de caractères, qu'il y'ait cdata ou pas ca change rien si l'encodage est en utf-8 et que le texte est en iso, y'aura bug ...

Discussions similaires

  1. j'ai pas trouvé le db text box ou DBedit en WinForm??
    Par jean_Carlo dans le forum Delphi .NET
    Réponses: 1
    Dernier message: 19/09/2005, 23h02
  2. Réponses: 2
    Dernier message: 07/09/2005, 09h55
  3. [Champ text unique]
    Par Braq dans le forum Outils
    Réponses: 6
    Dernier message: 28/06/2005, 13h23
  4. Une valeur ne s'affiche pas dans un champ texte
    Par KibitO dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 13/03/2005, 20h42
  5. [web] [Perl/Tk] Pas d'insertion de texte !
    Par GLDavid dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 08/07/2004, 22h00

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