2009-09-10 9 views
0

Le format de fichier utilisé par mon application est basé sur Xml. Je viens d'avoir un client qui a un fichier xml bâclé. La chose contient près de 90 000 lignes et, pour une raison quelconque, il y a environ 20 symboles "=" entrecoupés au hasard.Réparations XML en C#

Je reçois une exception XmlException pour la plupart d'entre eux avec un numéro de ligne et une position char qui me permet de trouver les caractères incriminés et de les supprimer manuellement. Je viens de commencer à écrire une petite application qui automatise ce processus, mais je me demandais s'il y avait de meilleures façons de réparer les fichiers XML endommagés.

Exemple de ligne bâclé:

<item name="InstanceGuid" typ=e_name="gh_guid" type_code="9">ee330f9f-a1e2-451a-8c6d-723f066a6bd4</item> 
          ↑ (this is supposed to be [type_name]) 

Répondre

1

Vous pouvez rechercher tout signe égal qui n'est pas suivie d'une double citation. Une expression régulière (regex) serait assez simple à écrire.

Ou vous pouvez simplement ouvrir le fichier dans un éditeur de texte avancé et rechercher par la même expression regex pour trouver et remplacer/supprimer. Certains éditeurs de texte vous permettent de trouver/remplacer avec regex, de sorte que vous pouvez rechercher n'importe quel signe égal non suivi de guillemets et simplement le supprimer.

Bien sûr, je garde une copie de l'original car si vous aviez des signes égaux dans le fichier XML intérieur alors il pourrait gâcher, etc.

+0

Merci Jim, cela trouverez la plupart des erreurs. –

1

Utiliser une expression régulière pour nettoyer le xml première.

quelque chose comme:

s/([^\s"]+)=([^\s"]+="[^"]*")/\1\2/ 

Il est évident que cela devrait être porté à votre moteur de Regex de choix :)

+0

Merci JO, semble de plus en plus de mes problèmes ces jours-ci peuvent être corrigés par RegEx. –

+0

Je conseille d'appliquer la déclaration ci-dessus avec prudence. ;) – TrueWill

+0

Sans aucun doute. Le but était de donner une idée, pas une implémentation de qualité de production. D'où la déclaration "quelque chose comme" :) –

1

En TextPad si vous effectuez une recherche en utilisant l'expression régulière = [^ "] vous trouverez any = les signes non suivis d'un "

Ceci devrait trouver les emplacements dans le document où les signes = voyous sont apparus. Pour les remplacer, ouvrez d'abord le document dans TextPad. Ensuite, appuyez sur F8.

Dans la boîte de dialogue entrez les informations suivantes:

Trouvez ce que: = \ ([^ "] \)

Remplacer par: \ 1

Cochez la case "expressions régulières" boîte, sélectionnez" Tous les documents "et cliquez sur" Remplacer tout "

Ceci doit correspondre à tous = qui ne sont pas suivis d'un" et remplacer le = par le symbole qui l'a suivi.

typename = "test" typ = Ename = "test"

deviendra

typename = "test" typename = "test"