2010-12-16 14 views
3

Ich habe mit XML-Daten zu tun, die manchmal das Unescaped Ampersand enthalten, und ich kann den Produzenten nicht dazu bringen, entweder zu & zu entkommen oder es in einen CDATA-Abschnitt zu stecken.Ein regulärer Ausdruck, um XML zu bereinigen

Jetzt bin ich auf der Suche nach einem regulären Ausdruck zu ersetzen & mit & Ampere; wenn es nicht Teil einer Entität ist. Etwas wie folgt aus: (?! (Amp | apos | quot | lt | gt);) &

Leider nur meine Programmierumgebung unterstützen "erweiterte POSIX 1003.2 reguläre Ausdrücke" (siehe http://www.kernel.org/doc/man-pages/online/pages/man7/regex.7.html), die scheinen, die nicht Betreiber fehlt "!" benötigt hier.

Irgendwelche Ideen, wie man den notwendigen regelmäßigen Ausdruck fertigt?

+1

die korrekte "XML-ish" -Antwort wäre, es durch einen Validator auszuführen und als "nicht wohlgeformtes XML" abzulehnen. Es ist eine Schande, dass die Designer von XML nicht berücksichtigt haben, dass wir in der realen Welt manchmal mit schlechtem Input fertig werden und damit arbeiten müssen. – Spudley

+0

@Spudley: Ich führe die XML-Datei tatsächlich über einen Validator. So habe ich den missgebildeten Teil bemerkt. Leider ist es ein Microsoft-Produkt, das das ungültige XML produziert und zu ihnen "Standard" zu bedeuten scheint "optional". –

+0

hehe. Microsoft eh? Diese Abbildungen. (Da die kommerzielle Unterstützung der Grund ist, warum das Management oft Microsoft kauft, frage ich mich, ob MS bereit wäre, es für Sie zu reparieren? Natürlich nicht. – Spudley

Antwort

4

Querdenken: Ersetzen Sie alle & mit &amp dann alle mit &apos (zum Beispiel) &apos (usw.) ersetzen? Sie können eine Gruppe verwenden, um das Teil zu erfassen setzen werden - &(apos)

0

Anstatt etwas von der Suche eine negative regex passend Sie für etwas, das nicht eine positive regex passend, so etwas wie die Suche könnten:

! ... &(?(amp|apos|quot|lt|gt);) 

I habe nicht die ganze Seite gelesen, die du verlinkt hast, aber ich bin mir ziemlich sicher, dass es möglich sein sollte.

Verwandte Themen