Réparer un fichier doc corrompu : Différence entre versions

De Asso Val Libre
Aller à : navigation, rechercher
(Problème)
(Pratique)
 
Ligne 33 : Ligne 33 :
 
# comprendre l'erreur XML
 
# comprendre l'erreur XML
 
# savoir la corriger !
 
# savoir la corriger !
 
  
 
; xmlllint :  http://xmlsoft.org/xmllint.html
 
; xmlllint :  http://xmlsoft.org/xmllint.html

Version actuelle en date du 27 août 2021 à 14:42

Problème

Un fichier traitement de texte odt, doc, docx est en fait une archive ("zip") contenant un ensemble de fichiers xml. Il peut arriver que l'un de ces fichier soit corrompu et le logiciel LibreOffice ou Word refuse alors d'ouvrir le document. L'erreur provient généralement de ce que la structure du format XML d'une partie du document n'est plus valide, ne correspond donc plus à ce que le logiciel est capable de traiter, comprendre.

L'ouverture échoue avec éventuellement un message d'erreur indiquant une localisation précise du problème (nom du fichier xml, numéro de ligne, numéro de colonne, descriptif du problème).

Navigateurs 
Les navigateurs Firefox, Chrome, ... sont capables d'ouvrir des fichiers XML. En cas de problèmes, ils affichent donc un message d'erreur plus ou moins descriptif.
 This page contains the following errors:
 error on line 2 at column 206881: Opening and ending tag mismatch: hyperlink line 2 and sdtContent
 Below is a rendering of the page up to the first error.
Interprétation (sous réserve!) : à la ligne 2 colonne 206881, les balises ouvrante et fermante ne se correspondent pas. La balise stdContent rencontrée ne correspond pas à la balise hyperlink escomptée... (?)

Solution

Principe

La méthode est générique :

  1. ouvrir le document texte comme archive zip pour accéder aux différents répertoires et documents en XML
  2. accéder au documents XML où se trouve l'erreur signalée
  3. extraire le document pour le traiter en dehors de l'archive
  4. corriger le problème XML décrit (!??)
  5. ré-injecter le document XML corrigé dans son archive
  6. sauvegarder l'archive et l'ouvrir avec le logiciel (libreoffice ou word)
  7. et ça marche... (en théorie ;-)

Pratique

En pratique, toute la difficulté réside dans la capacité à

  1. comprendre l'erreur XML
  2. savoir la corriger !
xmlllint 
http://xmlsoft.org/xmllint.html
est un utilitaire ligne de commande qui permet de «traiter» des fichiers au format XML avec différentes fonctionnalités.

L'une des fonctionnalités est ici particulièrement utile : --recover

Soit fichier-erreur.xml le fichier identifié comme contenant l'erreur XML
 xmlllint --recover fichier-erreur.xml > fichier-propre.xml
Permet d'obtenir le fichier fichier-propre.xml éventuellement débarassé de l'erreur de structure XML
Il faut ensuite remplacer (nom identique évidemment) le fichier corrompu par ce fichier propre dans l'archive zip du document texte


Attention 
  1. Évidemment faire une sauvegarde des fichiers manipulés
  2. La correction apportée par xmllint n'est pas nécessairement pertinente (elle n'est pas «intelligente»), elle peut éventuellement être sans effet et ne pas corriger le problème.

En cas d'échec, il faut envisager une inspection et correction manuelle de l'erreur XML, xmllint peut alors au moins servir à la localiser.