Utilitaire de réparation de fichier XML

Discussions sur les projets et applications développés en liaison avec une suite bureautique libre.

Modérateur: Vilains modOOs

Utilitaire de réparation de fichier XML

Messagepar Scrat » 07 Mars 2018 20:03

Bonjour.

Mise à jour du 10 Juin 2018 => Version 1.0.4

Je vous propose ici un petit utilitaire de réparation de fichier XML que je vous propose de tester.

Je mets en ligne une archive XmlRepar_v_1_0_4.zip qui contient un dossier XmlRepar_v_1_0_4, lequel contient l'exécutable XmlRepar.jar et un sous-dossier lib contenant les bibliothèques nécessaires.

XmlRepar_v_1_0_4.zip
Archive contenant la version 1.0.4
(231.9 Kio) Téléchargé 44 fois


Un tutoriel complet est disponible sur cette page. Ce tutoriel est un fichier Writer au format odt qui s'ouvre en lecture seule. Vous pouvez le télécharger directement par ce lien. Je le résume ci-dessous.

Dézippez l'archive et stockez le dossier XmlRepar_v_1_0_4 ou vous le désirez. Pour lancer l'utilitaire, vous avez deux possibilités:
- par double clic sur l'icône du fichier XmlRepar.jar dans l'explorateur,
- en ligne de commande avec le code suivant
Code : Tout sélectionner   AgrandirRéduire
java -jar {chemin du dossier XmlRepar}/XmlRepar.jar


Une fenêtre s'ouvre avec une barre de menu et une zone de texte. La barre de menu contient les menus Fichier et Aide. L'aide vous donne quelques informations sur ce que peut faire l'utilitaire, sinon tout se gère par le menu Fichier en suivant les indications de la zone de texte:

- 1. Utilisez le menu Fichier->Ouvrir pour sélectionner le fichier à traiter, ce qui ouvre une fenêtre de l'explorateur pour choisir votre fichier XML.

- 2. Utilisez le menu Fichier->Réparer pour démarrer l'analyse du fichier. Vous avez une barre de progression qui s'anime au bas de la fenêtre et un message apparaît dans la zone de texte lorsque le travail est terminé. Utilisez l'ascenseur à droite pour voir le détail des erreurs corrigées.

Le fichier réparé est stocké sous un nom différent dans le même dossier que le fichier sélectionné. Ainsi, si vous avez sélectionné le fichier content.xml, le fichier réparé se nommera content_repare.xml.

- 3. Utilisez le menu Fichier->Ouvrir pour sélectionner un autre fichier, ou le menu Fichier->Quitter pour fermer l'application.

Je joins également une archive contenant un exemple de fichier corrompu et le résultat attendu après correction. Bons tests et merci pour vos retours. :wink:

exemple_xml.zip
Exemple de fichier XML corrompu et de la correction obtenue
(597 octet(s)) Téléchargé 31 fois


Je ne prétends pas que cet utilitaire va résoudre tous les problèmes, mais il devrait être efficace pour la suppression des multiples définitions d'un attribut. Il peut aussi corriger les définition incorrectes lorsque le signe " est absent après la valeur de l'attribut. Enfin il peut aussi réparer la structure des blocs lorsqu'il trouve des balises orphelines ou lorsque le fichier est tronqué, mais le résultat risque de ne pas être interprétable par AOO/LibO, auquel cas il faudra tout de même mettre les mains dans le cambouis. Dans tous les cas, je conseille d'éditer le fichier pour l'examiner avant de tenter une réparation. En particulier, si la fin du fichier n'est plus que de la bouillie, la supprimer facilitera le travail de l'utilitaire... et lui évitera peut-être de se planter.

A+
Dernière édition par Scrat le 16 Juin 2018 18:44, édité 10 fois.
Libre Office 5.4.7.2 Vista 32 bits SP2
Utilisez l'extension de Sauvegarde incrémentale pour ne pas perdre de document !
Avatar de l’utilisateur
Scrat
HédOOniste
HédOOniste
 
Message(s) : 1604
Inscrit le : 06 Juin 2014 11:39
Localisation : Île d'Oléron

Re: Utilitaire de réparation de fichier XML

Messagepar Jeff » 08 Mars 2018 10:11

Bonjour,

Merci pour ce nouvel utilitaire, qui plus est multi-plateforme :super: .
(pour mémoire, Scrat a également fourni un Outil de récupération de texte également sous Java)

Pour ceux qui voudrait tester sous Linux, une fois l'archive extraite :

    1. Via le terminal :
    2. Via l'interface graphique (réalisée ici sous Xubuntu, donc avec Xfce)
      • Clic-droit sur le bureau > Créer un lanceur
        • Renseigner le nom voulu
        • Renseigner un éventuel commentaire
        • Renseigner la commande suivante :
          Code : Tout sélectionner   AgrandirRéduire
          java -jar XmlRepar.jar
        • Renseigner le répertoire de travail
        • Hormis le chemin du répertoire de travail qui varie selon votre configuration, le lanceur devrait ressembler à :

          Capture d’écran_2018-03-08_11-52-42.png
          Capture d’écran_2018-03-08_11-52-42.png (38.68 Kio) Consulté 1062 fois


          Au premier lancement, cliquer sur le bouton "Marquer exécutable"
  • L'utilitaire s'affiche :

    Capture d’écran_2018-03-08_09-58-12.png

  • Le programme étant lancé, utiliser le menu Fichier > Ouvrir, et sélectionner le fichier.xml concerné

    Capture d’écran_2018-03-08_10-01-35.png

  • Utiliser le menu Fichier > Réparer pour lancer la réparation :

    Capture d’écran_2018-03-08_10-02-09.png

  • Le programme vous donne (assez rapidement pour un fichier sain) un résumé, et vous informe que le traitement est terminé

    Capture d’écran_2018-03-08_10-03-33.png

  • Pour quitter l'utilitaire, menu Fichier > Quitter

À lire avant tout !

Pour télécharger Apache OpenOffice

AOO 4.1.5 sur Xubuntu 16.04_i586 et sur Win 10 pro x64
Avatar de l’utilisateur
Jeff
GourOOu
GourOOu
 
Message(s) : 7582
Inscrit le : 18 Sep 2006 10:40
Localisation : France

Re: Utilitaire de réparation de fichier XML

Messagepar Jeff » 08 Mars 2018 16:06

Je poste à part mes observations :wink:

  • Ergonomie :
    Serait-il possible que lorsque l’on utilise la commande Fichier > Ouvrir, on accède directement au dossier contenant l’utilitaire ?


  • Fonctionnement :
    • Que ce soit sur Linux Xubuntu ou Windows 10, lorsqu’un fichier est réparé, j’ai un doublon nommé input_copy.xml qui est créé dans le dossier contenant l’utilitaire ; a priori, il s’agit du content.xml original.
      (dans tous les cas, le fichier content_repare.xml est bien dans le dossier du content.xml original :) )

      XmlRepar1.png


    • J’ai un fichier a priori sans histoire :
      Sous-total_avec_Decaler.ods
      (16.26 Kio) Téléchargé 16 fois


      L’utilitaire me signale une valeur malformée corrigée à la position 15 067 sur 15 190, autant dire vers la fin.

      XmlRepar2.png


      Si je recherche le terme incriminé, je vois la différence suivante entre le content.xml et le content_repare.xml

      XmlRepar3.png


      Pour le coup, il y a une erreur de syntaxe, et si je relance l’utilitaire, il n’arrive pas à réparer son erreur.


  • Cosmétique

    Sous Linux uniquement, le dialogue Aide > À propos est tronqué, le bouton Fermer est à peine visible (ok sur W10, je peux te faire une copie-écran au cas où)

Tout cela reste sur le mode de la critique constructive :D

Pour l’instant, j’ai "piégé" involontairement l’utilitaire sur un fichier a priori sain, cela n’enlève rien a ses capacités sur les fichiers défectueux :super:
À lire avant tout !

Pour télécharger Apache OpenOffice

AOO 4.1.5 sur Xubuntu 16.04_i586 et sur Win 10 pro x64
Avatar de l’utilisateur
Jeff
GourOOu
GourOOu
 
Message(s) : 7582
Inscrit le : 18 Sep 2006 10:40
Localisation : France

Re: Utilitaire de réparation de fichier XML

Messagepar Scrat » 08 Mars 2018 18:56

Bonjour Jeff.

Merci pour ces retours constructifs.

Concernant le premier point, je ne comprends pas trop ce que tu veux. Pourquoi accéder au dossier contenant l'utilitaire ? Le menu Fichier->Ouvrir ne sert qu'à aller chercher le fichier que tu veux réparer, et je déconseille de travailler dans le dossier XmlRepar. Mais je peux toujours essayer de rajouter cette possibilité.

Concernant le second point, le fichier input_copy.xml est effectivement une copie du fichier d'entrée faite pour la mise au point du décodage et du codage des caractères spéciaux... et que j'ai oubliée dans le code. :mrgreen: Cette copie sera supprimée dans la prochaine mise à jour.

Concernant le troisième point, tu as effectivement trouvé comment piéger l'utilitaire. Pour détecter les attributs, je ne pouvais utiliser ni le signe = ni l'espace puisque ces deux caractères peuvent se retrouver dans la valeur d'un attribut. Je ne pouvais pas non plus utiliser le caractère " qui peut manquer au début ou à la fin d'une valeur malformée. J'ai donc choisi de détecter la déclaration d'attribut par la suite des deux caractères =". L'inconvénient, c'est que les attributs pour lesquels le caractère " manque au début ne sont pas détectés. Mais je n'avais pas prévu qu'une valeur d'attribut puisse être réduite au seul signe = ou se terminer par =. J'ai modifié le code pour prévoir la présence de la chaîne ="=" et maintenant ton document est reconnu comme sain (ouf ! :lol: ). La correction sera dans la prochaine mise à jour.

Pour le côté "Cosmétique" sous Linux, je crois comprendre d'où ça vient, mais c'est étonnant que l'affichage soit correct sur un OS et pas sur l'autre. Work in progress...

De toute façon, je dois préparer la prise en compte de la présence de commentaires dans un fichier XML. Toutes les corrections seront dans la prochaine version dans mon premier message que je réactualiserai dans quelques jours

Je suis toujours intéressé par des retours avec des exemples qui piègent l'utilitaire. Merci aux volontaires.

A+
Libre Office 5.4.7.2 Vista 32 bits SP2
Utilisez l'extension de Sauvegarde incrémentale pour ne pas perdre de document !
Avatar de l’utilisateur
Scrat
HédOOniste
HédOOniste
 
Message(s) : 1604
Inscrit le : 06 Juin 2014 11:39
Localisation : Île d'Oléron

Re: Utilitaire de réparation de fichier XML

Messagepar Jeff » 09 Mars 2018 15:29

  1. Scrat a écrit:Pourquoi accéder au dossier contenant l'utilitaire ?

    En fait, je travaille assez "loin" dans l'arborescence, avec une structure de fichier qui fait que le répertoire dans lequel je mets les utilitaires de récupération est voisin du répertoire dans lequel je mets les fichiers à traiter.

    Du coup, je suis obligé de "remonter" toute l'arborescence pour ouvrir un fichier, alors qu'il suffirait de descendre d'un dossier pour remonter immédiatement dans le dossier voulu.

    Je pense cependant que c'est plus logique pour l'utilisateur standard, donc la modif est probablement inutile.


  2. Scrat a écrit: le fichier input_copy.xml [...] Cette copie sera supprimée dans la prochaine mise à jour.
    :super:

  3. Scrat a écrit: c'est étonnant que l'affichage soit correct sur un OS et pas sur l'autre

    Avec Xubuntu 16.04 32 bits installé "nativement" (j'entends par la qu'il ne s'agit pas d'un dual-boot ou autre, c'est le seul OS du poste) :

    Xfce.png
    Version Linux : Xubuntu 16.04 i586


    J'ai voulu testé avec Ubuntu 16.04 x64, version qui, pour le coup, est installée dans une machine virtuelle, et tourne avec openJDK (du Java OpenSource), là par contre, ça crashe avec le log suivant :
    Code : Tout sélectionner   AgrandirRéduire
    jeff@jeff-VirtualBox:~/Téléchargements/XmlRepar/XmlRepar$ java -jar XmlRepar.jar
    #
    # A fatal error has been detected by the Java Runtime Environment:
    #
    #  SIGSEGV (0xb) at pc=0x00007fe9fd9ef009, pid=2911, tid=2935
    #
    # JRE version: OpenJDK Runtime Environment (9.0) (build 9-internal+0-2016-04-14-195246.buildd.src)
    # Java VM: OpenJDK 64-Bit Server VM (9-internal+0-2016-04-14-195246.buildd.src, mixed mode, tiered, compressed oops, g1 gc, linux-amd64)
    # Problematic frame:
    # C  [libjava.so+0x1d009]  JNU_GetEnv+0x19
    #
    # Core dump will be written. Default location: Core dumps may be processed with "/usr/share/apport/apport %p %s %c %d %P" (or dumping to /home/jeff/Téléchargements/XmlRepar/XmlRepar/core.2911)
    #
    # An error report file with more information is saved as:
    # /home/jeff/Téléchargements/XmlRepar/XmlRepar/hs_err_pid2911.log
    #
    # If you would like to submit a bogue report, please visit:
    #   http://bugreport.java.com/bugreport/crash.jsp
    # The crash happened outside the Java Virtual Machine in native code.
    # See problematic frame for where to report the bogue.
    #
    Abandon (core dumped)

    Le fichier log zippé, je n'y comprends absolument rien, mais si ça peut aider :
    hs_err_pid2911.log.zip
    Le fichier n'est pas renommé, il faut effectivement le dézipper.
    (12.35 Kio) Téléchargé 14 fois

    J'essaierai en installant la version Java d'Oracle, mais plutôt courant semaine prochaine.
À lire avant tout !

Pour télécharger Apache OpenOffice

AOO 4.1.5 sur Xubuntu 16.04_i586 et sur Win 10 pro x64
Avatar de l’utilisateur
Jeff
GourOOu
GourOOu
 
Message(s) : 7582
Inscrit le : 18 Sep 2006 10:40
Localisation : France

Re: Utilitaire de réparation de fichier XML

Messagepar Scrat » 09 Mars 2018 16:53

Bonjour.

Mise à jour en version 1.01 dans mon premier message: désormais, le nom du dossier contenant l'application porte le numéro de version pour éviter toute confusion.

Modifications apportées:
- première ouverture de l'explorateur dans le dossier de l'application, puis ouvertures suivantes dans le dernier dossier ouvert.
- copie du fichier d'entrée supprimée.
- modification de la détection des attributs pour tenir compte de la présence éventuelle de la chaîne ="=" qui provoquait une fausse détection dans la première version, plus ajout de quelques tests pour éviter d'avoir des caractères bizarres dans le nom d'une balise malformée.
- prise en compte de la présence de commentaires avec réparation des commentaires malformés.
- retouche de la fenêtre A propos, en espérant que ça passe sous Linux.

Quant au crash avec OpenJDK, je n'ai pas suffisamment de connaissances en java pour comprendre ce qui se passe. Apparemment, Java ne trouve pas certains fichiers relatifs à la partie graphique (voir messages File not found, Class not found).

L'utilitaire est développé dans Netbeans 8.2 tournant avec le JDK 1.8 d'Oracle sous Vista 32 bits, et le projet est construit avec le Swing Application Framework qui crée automatiquement la partie graphique avec les menus. Dans ses mises à jours de NetBeans , Oracle avait supprimé cette possibilité en préconisant de passer plutôt par la plateforme NetBeans, mais c'est une usine à gaz beaucoup trop lourde pour des applications simples comme la mienne et beaucoup d'utilisateurs ont râlé. Oracle a donc rétabli les bibliothèques Swing Application Framework dans Netbeans, mais ces bibliothèques ne sont plus maintenues. Éventuellement, pour une utilisation avec OpenJDK, je peux fournir les trois fichiers des classes java qui traitent les fichiers XML (classes FileParser, Block et Balise), à charge pour l'utilisateur de construire son interface, graphique ou pas.

 Ajout : Concernant le crash avec OpenJDK 9, j'ai trouvé un rapport de bogue sur le net qui renvoie les mêmes messages d'erreur:
https://bugs.openjdk.java.net/browse/JDK-8173626

Ce bogue est en rapport avec celui-ci pour l'application Swing "Hello world" qui ne fonctionne pas:
https://bugs.openjdk.java.net/browse/JDK-8159050

Et la réponse faite dans le premier rapport:
Email sent to the Submitter:
As per the submitted report, The issue is coming from OpenJDK 9ea. We would highly recommend you to try running with Oracle's JDK 9ea latest build. :mrgreen:
 


A+
Libre Office 5.4.7.2 Vista 32 bits SP2
Utilisez l'extension de Sauvegarde incrémentale pour ne pas perdre de document !
Avatar de l’utilisateur
Scrat
HédOOniste
HédOOniste
 
Message(s) : 1604
Inscrit le : 06 Juin 2014 11:39
Localisation : Île d'Oléron

Re: Utilitaire de réparation de fichier XML

Messagepar Jeff » 10 Mars 2018 18:24

Scrat a écrit:retouche de la fenêtre A propos, en espérant que ça passe sous Linux


Nickel :D

Capture d’écran_2018-03-10_18-21-56.png

Si je veux chipoter, je dirai qu'il manque la version de l'utilitaire dans l'intitulé de la fenêtre :lol: , du coup, comme le numéro de version apparaît clairement dans le contenu de la fenêtre, je virerai le numéro de version dans l'intitulé de la fenêtre.

Scrat a écrit:try running with Oracle's JDK
Yes oui canne :mrgreen:
À lire avant tout !

Pour télécharger Apache OpenOffice

AOO 4.1.5 sur Xubuntu 16.04_i586 et sur Win 10 pro x64
Avatar de l’utilisateur
Jeff
GourOOu
GourOOu
 
Message(s) : 7582
Inscrit le : 18 Sep 2006 10:40
Localisation : France

Re: Utilitaire de réparation de fichier XML

Messagepar Scrat » 15 Mars 2018 20:08

Bonjour.

Mise à jour du 15 mars 2018 en version 1.0.2 dans le premier message:

- amélioration de la robustesse (ajout de protections contre les plantages),
- amélioration de la détection des champs (balises et attributs),
- suppression des caractères non autorisés dans les noms des champs,
- résultats d'analyse plus détaillés et mieux formatés,

A+
Libre Office 5.4.7.2 Vista 32 bits SP2
Utilisez l'extension de Sauvegarde incrémentale pour ne pas perdre de document !
Avatar de l’utilisateur
Scrat
HédOOniste
HédOOniste
 
Message(s) : 1604
Inscrit le : 06 Juin 2014 11:39
Localisation : Île d'Oléron

Re: Utilitaire de réparation de fichier XML

Messagepar HRk2o » 16 Mars 2018 14:31

Bjr,

testé sur Mac OsX El Capitan, pas de problèmes apparus sur les fichiers en exemple.
Ce sera un +++ car ni WinRar ni CZip n'existaient pour OsX

:bravo: :bravo: :super:
AOO 4.15 et LO 4.37 sous OsX El Capitan ;AOo 4.15 sous OsX Sierra + Windows 7 sous AOO 4.15 et LibO 4.4.6
HRk2o
Membre cOOnfirmé
Membre cOOnfirmé
 
Message(s) : 234
Inscrit le : 29 Mai 2009 09:51
Localisation : Guyane

Re: Utilitaire de réparation de fichier XML

Messagepar Scrat » 20 Mars 2018 20:05

Bonjour.

Mise à jour du 20 mars 2018 en version 1.0.3 dans le premier message.

Correction d'un problème de détection qui faisait que certaines erreurs pourtant corrigées n'apparaissaient pas dans dans le résultat de l'analyse.

A+
Libre Office 5.4.7.2 Vista 32 bits SP2
Utilisez l'extension de Sauvegarde incrémentale pour ne pas perdre de document !
Avatar de l’utilisateur
Scrat
HédOOniste
HédOOniste
 
Message(s) : 1604
Inscrit le : 06 Juin 2014 11:39
Localisation : Île d'Oléron

Re: Utilitaire de réparation de fichier XML

Messagepar Scrat » 10 Juin 2018 22:30

Bonjour.

Mise à jour du 10 juin 2018 en version 1.0.4 dans le premier message.

Cette version améliore la robustesse en éliminant le problème rencontré avec un fichier très corrompu qui provoquait un dépassement de tableau.

Pour les puristes, la modification consiste à ignorer un caractère < s'il est isolé au sein d'une balise et à ignorer un caractère > s'il est isolé en dehors d'une balise, ceci afin de préserver l'alternance des caractères < et >.

Naturellement, tous les cas de corruption ne peuvent pas être prévus, et un plantage de l'outil de réparation est toujours possible. C'est pourquoi il est toujours recommandé de faciliter le travail de l'outil de réparation en éditant le fichier XML pour éliminer tout ce qui parait trop corrompu à la fin, en particulier si le fichier a été tronqué. Plutôt que de laisser des scories, il est préférable d'élaguer le fichier proprement, et l'outil de réparation sera toujours capable de reconstituer les balises manquantes pour fermer les blocs et avoir une fin de fichier correcte.

A+
Libre Office 5.4.7.2 Vista 32 bits SP2
Utilisez l'extension de Sauvegarde incrémentale pour ne pas perdre de document !
Avatar de l’utilisateur
Scrat
HédOOniste
HédOOniste
 
Message(s) : 1604
Inscrit le : 06 Juin 2014 11:39
Localisation : Île d'Oléron

Re: Utilitaire de réparation de fichier XML

Messagepar zeguedon » 11 Juin 2018 00:36

Salut,

Voilà une belle initiative qui va nous épargner bien des maux de tête et nous faire gagner de précieuses minutes :super: :bravo: :bravo:
Sans compter qu'à terme l'utilisateur lambda pourra se dépanner seul.
Testé sous Linux.

A+
Comment baliser [Résolu] ?
AOO 4.1.5
LibreOffice 5.4.5.1
Ubuntu 18.04 LTS
zeguedon
ManitOOu
ManitOOu
 
Message(s) : 2556
Inscrit le : 02 Juil 2014 18:25


Retour vers Projets

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 1 invité