Domanda

Il formato file utilizzato dalla mia applicazione è basato su Xml. Ho appena ricevuto un cliente che ha un file XML in avaria. La cosa contiene quasi 90.000 righe e per qualche motivo ci sono circa 20 "=". simboli intervallati casualmente.

Ricevo una XmlException per la maggior parte di essi con un numero di riga e una posizione di carattere che mi consente di trovare caratteri offensivi e rimuoverli manualmente. Ho appena iniziato a scrivere una piccola app che automatizza questo processo, ma mi chiedevo se ci sono modi migliori per riparare i file XML danneggiati.

Esempio di linea pasticciata:

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

Soluzione

Puoi cercare qualsiasi segno uguale che non sia seguito da una doppia citazione. Un'espressione regolare (regex) sarebbe piuttosto semplice da scrivere.

Oppure potresti semplicemente aprire il file in un editor di testo avanzato e cercare con la stessa espressione regex per trovare e sostituire / rimuovere. Alcuni editor di testo ti consentono di trovare / sostituire con regex, in modo da poter cercare qualsiasi segno uguale non seguito da virgolette doppie e rimuoverlo.

Certo, terrei una copia dell'originale poiché se avessi segni uguali nell'XML interno, potrebbe rovinarlo, ecc.

Altri suggerimenti

Usa prima un'espressione regolare per pulire l'xml.

qualcosa del tipo:

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

Ovviamente questo dovrebbe essere portato sul tuo motore Regex preferito :)

In TextPad se esegui una ricerca utilizzando l'espressione regolare = [^ "] troverai tutti i segni = non seguiti da un "

Questo dovrebbe trovare le posizioni nel documento in cui sono apparsi i segni canaglia =. Per sostituirli, prima aprire il documento in TextPad. Quindi premere F8.

Nella finestra di dialogo immettere quanto segue:

Trova cosa: = \ ([^ "] \)

Sostituisci con: \ 1

Controlla le " Espressioni regolari " casella, seleziona " Tutti i documenti " e fai clic su " Sostituisci tutto "

Questo dovrebbe corrispondere a tutti = che non sono seguiti da un " e sostituisci il = con il simbolo che l'ha seguito.

typename = " prova " tip = ename = " prova "

diventerà

typename = " prova " typename = " prova "

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top