Frage

Das Dateiformat meine Anwendung verwendet ist XML-basiert. Ich habe einen Kunden, der eine verpfuschte XML-Datei hat. Die Sache enthält fast 90.000 Zeilen und aus irgendeinem Grund gibt es etwa 20 „=“ Symbole zufällig eingestreut.

Ich erhalte eine XmlException für die meisten von ihnen mit einer Zeilennummer und char Position, die mir diese manuell finden Zeichen zu beleidigen und entfernen. Ich habe gerade begonnen, eine kleine Anwendung zu schreiben, die diesen Prozess automatisiert, aber ich frage mich, ob es gibt bessere Möglichkeiten beschädigte XML-Dateien zu reparieren.

Beispiel für verpfuschte Zeile:

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

Lösung

Sie konnten für jedes Gleichheitszeichen suchen, die nicht von einem doppelten Anführungszeichen folgt. Ein regulärer Ausdruck (regex) wäre ziemlich einfach zu schreiben.

Oder Sie könnten nur die Datei in einem erweiterten Texteditor öffnen und nach dem gleichen regulären Ausdruck suchen, um zu finden und ersetzen / entfernen. Einige Texteditoren können Sie Suchen / Ersetzen mit regulären Ausdruck, so könnte man für jede Gleichheitszeichen suchen nicht durch doppelte Anführungszeichen gefolgt und es einfach entfernen.

Natürlich habe ich da eine Kopie des Originals behalten würden, wenn Sie Gleichheitszeichen in der inneren XML hatte dann könnte es mess es, etc.

Andere Tipps

Verwenden Sie einen regulären Ausdruck zuerst die xml zu reinigen.

so etwas wie:

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

Offensichtlich müßte Ihren Regex-Engine der Wahl portiert werden:)

In TextPad, wenn Sie die Suche mit regulären Ausdrücken verwenden = [^ „] Sie any = Zeichen finden wird nicht gefolgt von einem“

Dies sollte die Orte in dem Dokument finden, wo die Schurken = Zeichen erschienen sind. Um sie zu ersetzen, öffnen Sie das Dokument zunächst in TextPad. Dann F8 drücken.

Im Dialog geben Sie Folgendes:

Suchen nach: = \ ([^ "] \)

Ersetzen mit: \ 1

Überprüfen Sie die „Reguläre Ausdrücke“ ein, wählen Sie „Alle Dokumente“ und klicken Sie auf „Alle ersetzen“

Dies sollte alle = übereinstimmen, die durch eine nicht befolgt werden "und die = mit dem Symbol ersetzen, es folgte.

= Typname "test" typ = ename = "test"

wird geworden

= Typname "test" typename = "test"

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top