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

WinDev Discussion :

UTF8VersChaîne / XMLDocument : WD14 OK / WD15 KO !


Sujet :

WinDev

  1. #1
    Membre actif Avatar de peijnoob
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    279
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 279
    Points : 294
    Points
    294
    Par défaut UTF8VersChaîne / XMLDocument : WD14 OK / WD15 KO !
    Bonjour à tous,

    La migration d'une de mes applications en WD15 s'est passé pour la plupart sans encombre, sauf pour une petite partie qui, mine de rien, met un peu tout en l'air.

    En effet, dans cette appli, je vais lire des lignes de script, qu'il faut envoyer à une autre application via une API, dans un fichier XML. Ce fichier XML contient quelques caractères pas très communs, dont le caractère ‡ (caractère très utilisé dans l'application à qui j'envoie les lignes de script, affichable avec la combinaison Alt+0135).

    Voici une petite partie de mon fichier XML :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
            <section nom="formalites">
                <ligne  num="1">‡ ************************************************************</ligne>
                <ligne option="1" num="2">‡  MERCI DE VERIFIER LES CONDITIONS ET LES FORMALITES DE POLICE </ligne>
                <ligne option="1" num="3">‡  ET DE SANTE EN VIGUEUR A LA DATE D ENTREE DANS LE PAYS</ligne>
                <ligne option="1" num="4">‡  DE DESTINATION OU DE TRANSIT.</ligne>
                <ligne  num="5">‡ ************************************************************</ligne>
            </section>
    Le fichier est encodé en UTF-8 afin d'éviter des problèmes de lecture.. A la base..
    Le fichier est parfaitement lisible dans n'importe quel éditeur XML (nous utilisons Oxygen et XMLSpy, ça passe aussi nickel dans Notepad++ et tous ces softs me confirment que l'encodage du fichier est correct).

    Ce fichier XML est chargé avec le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    XMLTermine(sDocXml)
    sXml = UTF8VersChaîne(fChargeTexte(gsRepExe + "\data\scripts.xml"))
    SI PAS XMLDocument(sDocXml, sXml) ALORS
    	Info("Impossible de charger les textes des scripts.", "Vérifiez que le fichier ""scripts.xml"" est bien présent dans le répertoire DATA de l'application.")
    	RENVOYER Faux
    FIN
    Le code est vraiment très basique et fonctionnait très bien sous Windev 14. Par contre, sous Windev 15, le XMLDocument ne passe pas, avec comme erreur "Le document n'est pas au format XML".
    Pourtant, si je trace le contenu de ma variable sXml, tout à l'air correct : le caractère ‡ apparaît correctement, et si je fais un copié/collé du résultat dans un éditeur, pas de souci (alors qu'en cas de problème d'encodage, il m'envoie paître comme un malpropre).

    Donc je me posais les questions suivantes : Ont-ils changé la gestion de l'UTF-8 dans WD15 au point qu'il soit incapable de lire correctement un fichier ?

    A noter que nous créons également des webservices sous WD, et que nous avons également eu des problèmes d'UTF-8 que nous n'avions pas avec la version 14 (même erreur : "Le document n'est pas au format XML")

    Pour info, j'ai testé mon bout de code en enlevant l'UTF8VersChaine, afin de vérifier si il ne faisait pas un décodage automatique du fichier maintenant avec le XMLDocument : le XMLDocument fonctionne, mais le décodage n'est pas correct et donc, les formats envoyés à l'API de l'application externe ne sont pas bons...

    Voilà, si vous avez des réponses, une solution, je suis preneur !

    Merci d'avance !

  2. #2
    Expert éminent sénior
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 413
    Points : 19 609
    Points
    19 609
    Par défaut
    Essaye avec ceci plutôt que UT8VersChaine().
    Un problème avec Git ? Essayez la FAQ, sinon posez votre question sur le forum.



    "Toute personne croyant qu'une croissance exponentielle peut durer indéfiniment dans un monde fini est soit un fou, soit un économiste."
    Kenneth E. Boulding

    "Les richesses naturelles sont inépuisables, car, sans cela, nous ne les obtiendrions pas gratuitement. Ne pouvant être ni multipliées ni épuisées, elles ne sont pas l’objet des sciences économiques."
    Jean-Baptiste Say, Traité d'économie politique, 1803.

    "/home/earth is 102% full ... please delete anyone you can."
    Inconnu

  3. #3
    Membre actif Avatar de peijnoob
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    279
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 279
    Points : 294
    Points
    294
    Par défaut
    Merci pour cette réponse.

    Alors tu parlais bien de la déclaration en UNICODE ?

    Seulement mon fichier est encodé en UTF-8 et non pas en unicode, mais j'ai testé malgré tout, et même problème que si j'enlève simplement l'UTF8VersChaine.

    Et ça n'explique pas non plus cette différence de comportement entre WD14 et WD15, je ne vois rien qui concerne ça dans l'aide (hormis le décodage UTF8 automatique pour Windev Mobile).

    Pour moi, tout ça ressemble à une bonne vieille régression des familles !

    Je pense que je vais envoyer une petite requête au support tiens, ça faisait longtemps (ça doit juste faire la 3e ou 4e en un mois là )


    [EDIT:]
    En fait, j'avais oublié de passer par un buffer. Là, ça me détruit carrément mon fichier en fait

  4. #4
    Membre expérimenté Avatar de klbsjpolp
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    1 065
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 065
    Points : 1 322
    Points
    1 322
    Par défaut
    Citation Envoyé par peijnoob Voir le message
    Seulement mon fichier est encodé en UTF-8 et non pas en unicode
    Salut,

    Pour ton problème je ne sais pas trop, mais il n'y a pas plus UNICODE que l'UTF-8. C'est le standard d'implémentation de la norme le plus utilisé.
    «Un problème bien défini est un problème à moitié résolu.»

  5. #5
    Membre expérimenté Avatar de Tober
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2007
    Messages
    824
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 824
    Points : 1 381
    Points
    1 381
    Par défaut
    Une réponse peut être sans intérêt mais on ne sait jamais :
    Peut être que ce n'est pas les caractères spéciaux ou l'encodage qui merde mais ton format de fichier xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <section nom="formalites">
                <ligne  num="1">‡ ************************************************************</ligne>
                <ligne option="1" num="2">‡  MERCI DE VERIFIER LES CONDITIONS ET LES FORMALITES DE POLICE </ligne>
                <ligne option="1" num="3">‡  ET DE SANTE EN VIGUEUR A LA DATE D ENTREE DANS LE PAYS</ligne>
                <ligne option="1" num="4">‡  DE DESTINATION OU DE TRANSIT.</ligne>
                <ligne  num="5">‡ ************************************************************</ligne>
            </section>
    Peut être que WinDev15 est plus strict dans son parsing et nécessite la balise de version d'xml (je sais pas comment elle s'appelle )
    au début du fichier...
    C'est une piste à creuser...

  6. #6
    Membre actif Avatar de peijnoob
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    279
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 279
    Points : 294
    Points
    294
    Par défaut
    Merci klbsjpolp pour cette précision, va falloir que j'aille réviser mes cours d'encodage !

    Tober, comme je disais, il s'agit bien d'une petite partie de mon fichier (pour montrer les fameux caractères ‡), j'ai une en-tête correcte (<?xml version="1.0"? encoding="UTF-8">)

    J'ai testé en enlevant l'attribut "encoding" pour voir, mais j'ai l'impression que WD détecte automatiquement le format d'encodage.

    J'ai fait un petit projet, ouvert en 14 puis en 15 pour montrer le problème à PCSoft. Voici le code de mon bouton :

    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
     
    sXml est une chaîne
    sDocXML est une chaîne = "exutf8"
     
     
    sXml = UTF8VersChaîne(fChargeTexte(fRepExe + "\scripts.xml"))
    SI XMLDocument(sDocXML, sXml) ALORS
     
    	SAI_XML = XMLConstruitChaîne(sDocXML)
    	XMLTermine(sDocXML)
    	Info("Le chargement du fichier s'est bien déroulé !")
     
    SINON	
     
    	Erreur("Erreur lors du chargement du document XML : " + RC + RC + ErreurInfo(errMessage))
     
    	sXml = fChargeTexte(fRepExe + "\scripts.xml")
    	SI XMLDocument(sDocXML, sXml) ALORS
    		SAI_XML = XMLConstruitChaîne(sDocXML)
    		XMLTermine(sDocXML)
    		Info("Le chargement du fichier s'est bien déroulé !")
    	SINON
    		Erreur("Erreur lors du chargement du document XML : " + RC + RC + ErreurInfo(errMessage))
    	FIN
     
    FIN
    Au niveau du résultat c'est simple : en WD14, le 1er XMLDocument passe, et dans mon champ de saisie, j'ai bien mon texte initial :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <section nom="formalites">
                <ligne  num="1">‡ ************************************************************</ligne>
                <ligne option="1" num="2">‡  MERCI DE VERIFIER LES CONDITIONS ET LES FORMALITES DE POLICE </ligne>
                <ligne option="1" num="3">‡  ET DE SANTE EN VIGUEUR A LA DATE D ENTREE DANS LE PAYS</ligne>
                <ligne option="1" num="4">‡  DE DESTINATION OU DE TRANSIT.</ligne>
                <ligne  num="5">‡ ************************************************************</ligne>
            </section>
    Par contre, en 15, j'ai le 1er XMLDocument qui ne passe pas. Le second passe correctement, et voici que j'ai dans mon champ de saisie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <section nom="formalites">
                <ligne  num="1">&#x2021; ************************************************************</ligne>
                <ligne option="1" num="2">&#x2021;  MERCI DE VERIFIER LES CONDITIONS ET LES FORMALITES DE POLICE </ligne>
                <ligne option="1" num="3">&#x2021;  ET DE SANTE EN VIGUEUR A LA DATE D ENTREE DANS LE PAYS</ligne>
                <ligne option="1" num="4">&#x2021;  DE DESTINATION OU DE TRANSIT.</ligne>
                <ligne  num="5">&#x2021; ************************************************************</ligne>
            </section>
    Je dis une bêtise ou il m'a encodé ça façon HTML ?

    Enfin bref, j'envoie les projets à pcsoft et je vais bien voir ce qu'ils me disent !

    [Edit] Hum, d'ailleurs, le code qu'il me renvoie me parait correspondre à tout sauf à mon "‡" initial...

  7. #7
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2010
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

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

    Informations forums :
    Inscription : Janvier 2010
    Messages : 161
    Points : 221
    Points
    221
    Par défaut
    Je confirme les dires de Tober. En version 15, ils sont apparemment beaucoup plus pointilleux et la balise

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?xml version="1.0" encoding="ISO8859-1" ?>
    est nécessaire et doit correspondre à l'encodage dans Windev.

    Exemple : Si tu essaies de faire passer un "ç" dans un XML généré en UTF-8, Windev ne le parsera pas.

    J'avais dû écrire un bout de code qui ouvrait simplement des fichiers XML générés par RecupConfig sous forme de texte, changeait la balise <?xml version (...)> pour la remettre en ISO histoire d'avoir mes ç, é, è, etc. vu que lui génèrait en UTF-8

  8. #8
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    2 328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Calvados (Basse Normandie)

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 328
    Points : 3 841
    Points
    3 841
    Par défaut
    Bonjour,

    Pour éviter de rencontrer ce type de problème, j'utilise les balises <![CDATA[truc]]>.

  9. #9
    Membre actif Avatar de peijnoob
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    279
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 279
    Points : 294
    Points
    294
    Par défaut
    Bonjour, et merci pour vos réponses.

    Concernant le CDATA, il permet au parser XML de ne pas interpréter le contenu de la balise, mais ça n'empêche pas le décodage des caractères, si ?

    Pour la balise d'en-tête XML, comme je l'ai dit, elle est présente dans mon fichier, il s'agit de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <?xml version="1.0" encoding="UTF-8"?>
    A priori, l'encodage du fichier est correct (en tout cas Notepad++ me dit que c'est ok, oxygen n'a pas l'air de rechigner...)

    Mais si je comprends bien, Windev convertirait automatiquement la chaine chargée dans son propre format d'encodage ??
    Et en quel honneur il me modifierait mes données sans que je lui aie demandé ? Surtout que ça me paraît pas très logique, car j'ai déjà chargé des fichiers binaires avec fChargeTexte pour les transférer octet par octet d'un client vers un serveur, et j'ai jamais eu de souci comparable à ça...

    Ou alors j'ai vraiment pas tout compris, mais je vous avoue que ça me dépasse un peu cette histoire...

    [EDIT] Mon encodage est correct donc. J'ai essayé de changer la balise d'en-tête et là mon éditeur XML m'envoie paître quand j'essaie d'enregistrer, ce qui somme-toute me paraît plutôt normal.

    [EDIT 2] Toujours par rapport à ce problème, je vous ai parlé d'autres soucis qu'on avait eu avec l'utf-8. Nous avons un webservice qui, côté serveur renvoie un "ChaineVersUTF8(reponse)".
    Côté client, on lisait cette réponse via un "UTF8VersChaine(reponse)".
    La réponse contient une classe sérialisée. Et bien pas manque, aussi bien ça fonctionnait en WD14, ça ne fonctionne plus en WD15. Il n'est même pas capable de décoder une chaîne qu'il a lui même encodée ! Ca ressemble quand même pas mal à un vieux bug non ?

  10. #10
    Membre expérimenté Avatar de Tober
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2007
    Messages
    824
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 824
    Points : 1 381
    Points
    1 381
    Par défaut
    Et du côté du support ils en disent quoi ?
    En tout cas, je suis d'accord avec toi, ça parait évident que c'est un bug.

  11. #11
    Membre actif Avatar de peijnoob
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    279
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 279
    Points : 294
    Points
    294
    Par défaut
    Côté support j'attends une réponse (requête partie hier soir vers 18h).

    Enfin, je leur est fait un petit projet le plus simple possible qui montre la différence entre la 14 et la 15 et le fait qu'on ne peut plus exploiter correctement le fichier lu, donc je devrais être fixé dès leur première réponse (j'espère que je l'aurai demain).


    [EDIT] Réponse du support => Bottage en touche...
    En gros ils me disent de réécrire mon code en utilisant le nouveau système de lecture de XML de WD15. Il est gentil le monsieur, mais j'ai pas trop le temps pour ça moi, et puis c'est censé fonctionner quand même !

  12. #12
    Membre expérimenté Avatar de klbsjpolp
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    1 065
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 065
    Points : 1 322
    Points
    1 322
    Par défaut
    Rebonjour,

    Ta chaîne semble utiliser les numéros de caractère plutôt que les vrais caractères. La chaine &#x2021; représente le caractère 2021 en hexa de la norme. Malheureusement, je ne connais aucune fonction Windev qui permettrait de faire la conversion en 14, mais puisqu'ils génèrent ces caractères en 15, ils ont peut-être ajouté une fonction.
    «Un problème bien défini est un problème à moitié résolu.»

  13. #13
    Membre expérimenté Avatar de Tober
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2007
    Messages
    824
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 824
    Points : 1 381
    Points
    1 381
    Par défaut
    T'as plus qu'à essayer d'utiliser leur nouveau système de lecture de XML (aucune idée de ce que c'est) et voir si ça marche...
    [Edit]T'as déjà de la chance qu'ils te répondent ! Moi j'ai envoyé un problème avec WinDev 12 il y a quelques mois, j'attend tjs là réponse

  14. #14
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2010
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

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

    Informations forums :
    Inscription : Janvier 2010
    Messages : 161
    Points : 221
    Points
    221
    Par défaut
    Une piste, car j'utilise cette nouvelle méthode.

    déclarer des objets de type xmlDocument
    déclarer des objets de type xmlNoeud

    faire des parcours de boucle !

    Je te mets ci-joint un bout de code utilisé dernièrement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    //Charger le document XML
    flux est un xmlDocument = XMLOuvre(CheminDocXML,depuisFichier)
     
    //Remplissage du flux XML, modification des données
    flux.DATAROOT.EMPLOYE.ID = (...)
    Sachant que la tronche du XML ressemble à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <?xml version="1.0" encoding="ISO8859-1" ?> 
    <DATAROOT>
    - <EMPLOYE>
      <ID>471829</ID> 
      <CODE_POLITESSE>3</CODE_POLITESSE> 
      <NOM_PRENOM>Tartampion Jean-Jacques</NOM_PRENOM> 
      <NOM>Tartampion</NOM> 
      <PRENOM>Jean-Jacques</PRENOM> 
      <E_MAIL /> 
    - <ADRESSE_OFFICIELLE>

  15. #15
    Membre actif Avatar de peijnoob
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    279
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 279
    Points : 294
    Points
    294
    Par défaut
    Citation Envoyé par klbsjpolp Voir le message
    Rebonjour,

    Ta chaîne semble utiliser les numéros de caractère plutôt que les vrais caractères. La chaine &#x2021; représente le caractère 2021 en hexa de la norme. Malheureusement, je ne connais aucune fonction Windev qui permettrait de faire la conversion en 14, mais puisqu'ils génèrent ces caractères en 15, ils ont peut-être ajouté une fonction.
    Alors non, le caractère &#x2021;, c'est Windev qui me le sort de nulle part, ma chaîne à l'origine est bien encodée en UTF-8, j'ai vérifié plusieurs fois déjà



    Tober, leur nouveau système de lecture XML est pas mal : t'importes un fichier XML ou un dtd dans Windev et il reconnait la structure. Ensuite, tu peux accéder aux éléments directement comme si c'était des objets imbriqués, c'est vraiment pas mal foutu, mais on n'a vraiment pas le temps de tout réécrire (parce que le fichier XML est assez gros, et c'est beaucoup de lignes de parsing qu'il faudrait réécrire...)

    Enfin, merci pour vos réponses !

  16. #16
    Membre actif Avatar de peijnoob
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    279
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 279
    Points : 294
    Points
    294
    Par défaut
    Citation Envoyé par lazariel Voir le message
    Une piste, car j'utilise cette nouvelle méthode.

    déclarer des objets de type xmlDocument
    déclarer des objets de type xmlNoeud

    faire des parcours de boucle !

    Je te mets ci-joint un bout de code utilisé dernièrement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    //Charger le document XML
    flux est un xmlDocument = XMLOuvre(CheminDocXML,depuisFichier)
     
    //Remplissage du flux XML, modification des données
    flux.DATAROOT.EMPLOYE.ID = (...)
    Sachant que la tronche du XML ressemble à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <?xml version="1.0" encoding="ISO8859-1" ?> 
    <DATAROOT>
    - <EMPLOYE>
      <ID>471829</ID> 
      <CODE_POLITESSE>3</CODE_POLITESSE> 
      <NOM_PRENOM>Tartampion Jean-Jacques</NOM_PRENOM> 
      <NOM>Tartampion</NOM> 
      <PRENOM>Jean-Jacques</PRENOM> 
      <E_MAIL /> 
    - <ADRESSE_OFFICIELLE>
    Yep, merci pour le coup de main, on avait déjà utilisé cette méthode dans un autre projet, mais là c'est surtout une question de temps de développement, on a un travail fou et pour le moment, je n'ai pas le temps qu'il me faudrait pour réécrire mon code de parsing.

    Enfin, il faudra y passer de toute façon, mais quand bien même, ce n'est pas normal que je ne puisse pas charger mon fichier et le mettre dans un XMLDocument (oui, je sais, je suis têtu, mais ça m'énerve cette histoire )

  17. #17
    Membre expérimenté Avatar de Tober
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2007
    Messages
    824
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 824
    Points : 1 381
    Points
    1 381
    Par défaut
    Je suis d'accord, c'est vraiment pas normal qu'une méthode ne marche plus parcequ'une nouvelle est implémentée..
    La seule solution temporaire, c'est de laisser le projet en WD 14 en attendant que t'ais le temps de tout migrer ou alors supplier le support de te faire un correctif (je sais je rêve )
    Bonne chance à toi !

  18. #18
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    2 328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Calvados (Basse Normandie)

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 328
    Points : 3 841
    Points
    3 841
    Par défaut
    Salut,

    Pour mon intérêt personnel, quel est la raison de cette migration en 15 ?

  19. #19
    Membre actif Avatar de peijnoob
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    279
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 279
    Points : 294
    Points
    294
    Par défaut
    Principalement pour profiter du nouveau système d'hébergement de webservices, basé sur le serveur d'applications Webdev.

    Nous avons des soucis de stabilité avec le déploiement de webservices en version 14 et inférieures (module ISAPI) que nous n'avons pas avec le serveur webdev.

    Aussi, nous avons beaucoup d'éléments communs entre des projets, dont certains ont déjà été migrés, donc il faut que le reste suive !

  20. #20
    Membre actif
    Inscrit en
    Août 2005
    Messages
    96
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 96
    Points : 205
    Points
    205
    Par défaut Problème encodage UTF-8 XMLDocument Windev 14 à 15
    J'ai eu le même problème d'encodage en passant de Windev 14 à Windev 15 :

    Ceci devrait solutionner ton problème :

    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
     
    sDocXml est une chaîne = "Doc"
    sXml est une chaîne
     
    sXml = "<section nom='formalites'>"
    sXml += "<ligne  num='1'>‡ ************************************************************</ligne>"
    sXml += "<ligne option='1' num='2'>‡  MERCI de VERIFIER LES CONDITIONS ET LES FORMALITES de POLICE </ligne>"
    sXml += "<ligne option='1' num='3'>‡  ET de SANTE EN VIGUEUR A LA DATE D ENTREE DANS LE PAYS</ligne>"
    sXml += "<ligne option='1' num='4'>‡  de DESTINATION OU de TRANSIT.</ligne>"
    sXml += "<ligne  num='5'>‡ ************************************************************</ligne>"
    sXml += "</section>"
     
    XMLTermine(sDocXml)
     
    sXml = ChaîneVersUTF8(sXml)
     
    //Ou bien, dans le cas d'un fichier au format UTF-8 qui contient exactement la chaine ci-dessus  : 
     
    sXml = fChargeTexte("C:\Users\Moi\Desktop\FileUTF8.txt")
     
    SI PAS XMLDocument(sDocXml,sXml) ALORS
    	Info("Impossible de charger les textes des scripts.", "Vérifiez que le fichier ""scripts.xml"" est bien présent dans le répertoire DATA de l'application.")
    	RENVOYER Faux
    FIN
     
    sData est une chaîne
     
    XMLPremier(sDocXml)
    XMLFils(sDocXml)
    TANTQUE PAS XMLEnDehors(sDocXml)
     
    	sData = XMLDonnée(sDocXml)
    	sData = UTF8VersChaîne(sData)
    	Trace(XMLPosition(sDocXml)+" : "+XMLDonnée(sDocXml,"nom")+" "+sData)
     
    	XMLSuivant(sDocXml)
    FIN
    Le problème vient du fait que la fonction XMLDocument n'accepte plus de chaines au format ISO en entrée mais uniquement en UTF-8 :

    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
     
    sXML est une chaîne
     
    sXML = " <root><balise>Hello été</balise></root>"
    sXML = ChaîneVersUTF8(sXML)
     
    XMLTermine("DOC")
     
    //Fonctionne parce que la chaîne est au format UTF-8
    SI PAS XMLDocument("DOC",sXML) ALORS
    	Erreur(ErreurInfo(errComplet))
    SINON
    	Info("Création document XML OK")
    	SI XMLExécuteXPath("DOC","//root/balise") ALORS
    		sXML = XMLVersTexte(XMLDonnée("DOC"))
    		Info(sXML)
    	FIN
    FIN
     
    XMLTermine("DOC")
     
    sXML = " <root><balise>Hello été</balise></root>"
     
    //Ne fonctionne pas parce que la chaîne n'est pas au format UTF-8
    SI PAS XMLDocument("DOC",sXML) ALORS
    	Erreur(ErreurInfo(errComplet))
    SINON
    	Info("Création document XML OK")
    	SI XMLExécuteXPath("DOC","//root/balise") ALORS
    		sXML = XMLVersTexte(XMLDonnée("DOC"))
    		Info(sXML)
    	FIN
    FIN
    Pour le décodage des données lues avec XMLDonnée(sDocXml), il te faudra inversement utiliser UTF8VersChaîne(XMLDonnée(sDocXml)).

    Enregistrement du fichier dans son format UTF-8 d'origine :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    sXml = XMLConstruitChaîne(sDocXml,XMLDocumentDéfaut,XMLEncodageUTF8)
    fSauveTexte("C:\Users\Moi\Desktop\FileUTF8.txt",sXml)
    Affichage du contenu du fichier dans un champ de saisie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    sXml = XMLConstruitChaîne(sDocXml,XMLDocumentDéfaut,XMLEncodageUTF8)
    SAI_Saisie..Valeur = UTF8VersChaîne(sXml)
    En bref, il faut toujours passer une chaine au format UTF-8 (ChaîneVersUTF8()) à la fonction XMLDocument() et récupérer cette chaine pour affichage en faisant l'opération inverse (UTF8VersChaîne()) sur le résultat de XMLDonnée() et XMLConstruitChaîne().


Discussions similaires

  1. [WD16] [WD15][WD14][WD12] achete windev occasion
    Par law56100 dans le forum WinDev
    Réponses: 4
    Dernier message: 12/07/2011, 08h30
  2. Réponses: 3
    Dernier message: 17/11/2005, 15h41
  3. [C#] transformer un XmlDocument en une string
    Par kaboume dans le forum ASP.NET
    Réponses: 2
    Dernier message: 22/06/2005, 11h49
  4. Exemple d'utilisation de XMLDocument
    Par Mickey.jet dans le forum Langage
    Réponses: 4
    Dernier message: 20/06/2005, 19h51
  5. [XMLDocument] Violation d'accès
    Par xant dans le forum Composants VCL
    Réponses: 8
    Dernier message: 29/09/2004, 15h39

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