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/XSL et SOAP Discussion :

Intégrité fichier XML (balises)


Sujet :

XML/XSL et SOAP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Homme Profil pro
    Responsable déploiement systèmes
    Inscrit en
    Juin 2015
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement systèmes
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juin 2015
    Messages : 120
    Par défaut Intégrité fichier XML (balises)
    Bonjour,

    j'ai plusieurs fichiers XML d'environ 20000 lignes dont je dois régulièrement importer le contenu.

    De temps à autre, en raison de la présence de balises orphelines dans ces fichiers (balise ouverte mais non fermée ou le contraire), le traitement plante…


    Je souhaiterais pouvoir vérifier l'intégrité des fichiers XML avant d'en exécuter l'import, afin de les corriger le cas échéant.

    Exemple de fichier XML :

    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <BALISE1>
    <BALISE2>valeur</BALISE2>
    <BALISE3>valeur</BALISE3>
    </BALISE1>
    <BALISE4>valeur</BALISE4>
    <BALISE1>
    <BALISE5>valeur</BALISE5>
    <BALISE6>valeur</BALISE6>
    </BALISE7>

    Dans cet exemple :

    - La balise1 s'ouvre et se ferme correctement une fois (lignes 1 et 4), se rouvre (ligne 6) mais ne se ferme pas.
    - La balise7 se ferme (ligne 9) mais ne s'est précédemment pas ouverte… D'où les 2 problèmes.

    SVP, connaîtriez-vous un outil ou un script (idéalement vbscript) qui pourrait effectuer ce contrôle et en afficher les erreurs éventuelles ?

    Merci d'avance pour vos précieux avis et conseils,
    Cdt, Stéphane

  2. #2
    Membre Expert Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Par défaut
    C'est simple pour tester le bien-formatage d'un fichier xml. On peut rapidement écrire un vbscript pour ce but et uniquement pour ce but.
    Code VB : 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
    dim xfile, oparser, bret
     
    xfile="batch001234.xml"    'à préciser
     
    set oparser=createobject("msxml2.freethreadeddomdocument.6.0")
    with oparser
        .async=false
        .validateonparse=false
        .resolveexternals=true
        bret=.load(xfile)
        if not bret then
            wscript.echo xfile & " : mal-formé."
            wscript.echo "error code: " & hex(.parseerror.errorcode) & vbcrlf & "reason: " & .parseerror.reason
        else
            wscript.echo xfile & " : bien-formé."
        end if
    end with
    set oparser=nothing
    On peut s'adapter pour qu'on recherche dans quelque répertoire et puis qu'on traite tous les candidats xml à traiter là-dedans. Aussi si par malheur vous n'avez pas v6.0 de msxml2.freethreadeddomdocument, trouvez la bonne version installée dans le système ou bien passez le moniker sans version par enlever la partie ".6.0" pour laisser le système à trouver une d'après le registre.

  3. #3
    Membre expérimenté
    Homme Profil pro
    Responsable déploiement systèmes
    Inscrit en
    Juin 2015
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement systèmes
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juin 2015
    Messages : 120
    Par défaut
    Bonjour Tsuji,

    merci pour votre réponse rapide et solution !

    Je viens de l'essayer avec le fichier exemple de mon message et ça me retourne :

    - Fichier mal formé
    - Code d'erreur : C00CE555
    - Raison : Un seul élément de niveau supérieur est autorisé dans un document XML

    Je n'ai peut-être pas la bonne version de msxml2... ? (j'ai aussi essayé en enlevant ".6.0" à Set oparser =…)

    En essayant sur l'un de mes fichiers de 20000 lignes, aurais-je davantage de précisions sur la ou les erreur(s) rencontrées ?

    J'ai aussi remplacé dans mon fichier exemple balise7 par balise1 (ligne 9) afin qu'il n'y ait plus d'erreur dans le fichier mais j'ai toujours le même retour d'erreur (voir plus haut)

  4. #4
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 986
    Par défaut
    Que les choses soient claires, l'outil que t'a donné tsuji ne sert qu'à afficher les problèmes de ton XML (ce qui correspond à ta demande). En aucun cas et d'aucune manière tu ne peux transformer un fichier corrompu (autrement dit: qui n'est pas du XML) en XML. À la limite tu peux effectuer des corrections dans la mesure ou tu disposes d'informations précises sur la structure attendue ou sur le type d'erreurs (mais ça restera du bricolage, mieux vaut solutionner le problème en amont si possible), mais en aucun cas tu ne peux espérer comme par miracle que ton XML soit comme il devrait être. Corrompu c'est foutu, mal formé c'est baisé.

    Tout ce que tu peux attendre d'un parser, c'est qu'il applique des corrections automatiques à ton document, mais rien ne garanti que ce seront celles que tu souhaites.

  5. #5
    Membre expérimenté
    Homme Profil pro
    Responsable déploiement systèmes
    Inscrit en
    Juin 2015
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement systèmes
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juin 2015
    Messages : 120
    Par défaut
    Bonjour @CosmoKnacki,

    tout à fait, je n'attend pas d'un outil (ou d'un script) qu'il fasse les corrections du fichier XML à ma place (sur 20000 lignes j'aurais trop peur qu'il fasse n'importe quoi…)

    Par contre, ce que j'espère d'un tel outil, c'est qu'il identifie les erreurs (balises en trop ou manquantes) et qu'il me précise la ligne (voire nom de la balise) ou l'erreur s'est produit.

    Ainsi, ça me permettrait de corriger le fichier si peu d'erreurs (ton fameux "bricolage") et surtout d'intervenir en amont pour éviter l'erreur lors de l'écriture du fichier…

    Aujourd'hui, j'ai régulièrement des fichiers XML qui plantent mais je ne sais pas ou et pourquoi.

    Donc, si j'ai bien compris tes explications, ce n'est pas d'un parser dont j'ai besoin...

  6. #6
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 986
    Par défaut
    Non tu as mal compris, tu as bien besoin d'un parser pour qu'il détecte les erreurs et c'est exactement ce que fait le code de tsuji. Seulement c'est ensuite à toi de lire et de comprendre les messages qu'il te renvoie (ce qui nécessite un minimum de connaissances du XML). Donc la première chose à faire est de lire un tutoriel de base sur le XML que tu trouveras probablement sur le site.

    Ici tu obtiens comme raison: Un seul élément de niveau supérieur est autorisé dans un document XML. Cette erreur est produite dés que le parser rencontre <BALISE4> car à ce moment le parser se rend compte qu'il n'y a pas d'élément racine dans ton document (ou plutôt que celui-ci n'est pas unique puisque BALISE1 et BALISE4 sont au même niveau).

    Si tu veux que le script t'indique la localisation de l'erreur, tu peux en plus afficher les propriétés .parseerror.line et .parseerror.linepos.

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