Question

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 entremêlés au hasard.

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

Exemple de ligne bloquée:

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

La solution

Vous pouvez rechercher tout signe égal non suivi d'un guillemet double. Une expression régulière (regex) serait assez simple à écrire.

Vous pouvez également ouvrir le fichier dans un éditeur de texte avancé et rechercher par la même expression régulière pour trouver et remplacer / supprimer. Certains éditeurs de texte vous permettent de rechercher / remplacer avec regex. Vous pouvez donc rechercher tout signe égal non suivi de guillemet double et le supprimer.

Bien sûr, je conserverais une copie de l'original, car si vous aviez des signes identiques dans le XML interne, cela risquerait de le gâcher, etc.

Autres conseils

Utilisez une expression régulière pour nettoyer d'abord le XML.

quelque chose comme:

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

Évidemment, cela devrait être porté sur le moteur Regex de votre choix:)

Dans TextPad, si vous effectuez une recherche à l'aide de l'expression régulière = [^ "], vous rencontrerez des signes = non suivis d'un"

".

Ceci devrait trouver les emplacements dans le document où les signes non autorisés = sont apparus. Pour les remplacer, commencez par ouvrir le document dans TextPad. Puis appuyez sur F8.

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

Trouver quoi: = \ ([^ "]] \)

Remplacer par: \ 1

Cochez la case "Expressions régulières". sélectionnez "Tous les documents". et cliquez sur "Remplacer tout"

Ceci devrait correspondre à tous les = qui ne sont pas suivis d'un " et remplacez le = par le symbole qui l’a suivi.

typename = " test " typ = ename = "test"

deviendra

typename = " test " nomtype = "test"

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top