Frage

Also ich versuche, einige XML zu analysieren, die Schaffung von denen nicht unter meiner Kontrolle. Das Problem ist, haben sie irgendwie Knoten bekam, die wie folgt aussehen:

<ID_INTERNAL_FEAT_FOCUSED_EXPERTISE_(MORNINGSTAR) />
<ID_INTERNAL_FEAT_FOCUSED_EXPERTISE_(QUARTERSTAFF) />
<ID_INTERNAL_FEAT_FOCUSED_EXPERTISE_(SCYTHE) />
<ID_INTERNAL_FEAT_FOCUSED_EXPERTISE_(TRATNYR) />
<ID_INTERNAL_FEAT_FOCUSED_EXPERTISE_(TRIPLE-HEADED_FLAIL) />
<ID_INTERNAL_FEAT_FOCUSED_EXPERTISE_(WARAXE) />

Visual Studio und .NET beide das Gefühl, dass die Zeichen ‚(‘ und ‚)‘, wie oben verwendet, völlig ungültig sind. Leider brauche ich diese Dateien zu verarbeiten! Gibt es eine Möglichkeit die XML-Reader-Klassen nicht ausflippen zu sehen, diese Zeichen zu bekommen, oder sie dynamisch oder etwas zu entkommen? Ich könnte die ganze Datei eine Art Vorverarbeitung tun, aber ich will die Zeichen ‚(‘ und ‚)‘, wenn sie innerhalb der Knoten in irgendeiner Art und Weise gültig erscheinen, so will ich nicht nur entfernen sie alle. ..

War es hilfreich?

Lösung

Das ist einfach nicht gültig. Vorverarbeitung ist die beste-Wette, vielleicht mit regex - so etwas wie:

string output = Regex.Replace(input, @"(<\w+)\((\w+)\)([ >/])", "$1$2$3");

Edit: ein wenig komplexer zu ersetzen die "-" innerhalb der Klammern:

string output = Regex.Replace(input, @"(<\w+)\(([-\w]+)\)([ >/])",
    delegate(Match match) {
        return match.Groups[1].Value + match.Groups[2].Value.Replace('-', '_')
             + match.Groups[3].Value;
    });

Andere Tipps

Wenn es nicht syntaktisch gültig ist, es ist nicht XML.

XML ist sehr streng darüber.

Wenn Sie die sendende Anwendung erhalten können korrekte XML schicken, dann lassen Sie sie wissen, dass was Downstream-Prozess sieht darin fehl , ob es Ihnen oder einige andere App in der Zukunft.

Wenn Vorverarbeitung ist keine Option, eine andere clevere Mechanismus ist das Stream Objekt zu wickeln, die an den Parser mit einem benutzerdefinierten Strom geleitet wird. Dieser Strom könnte für < Zeichen aussehen, und wenn es man sieht, ein Flag gesetzt. Bis ein > Charakter sehen ist, könnte es keine ( oder ) Zeichen essen. Wir haben so etwas wie diese verwendet, um loszuwerden, NUL und ^ Z Zeichen in eine XML-Datei, die von einem Legacy-Transportmechanismus hinzugefügt. (Die einzigen gotcha könnte es innerhalb eines Attributs < Zeichen, da sie müssen es nicht entgangen sein -. Nur > Zeichen tun)

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