Mit reg. Ausdrücken XML parsen + CDATA berücksichtigen
Christian S.
- programmiertechnik
0 Christian S.0 Cheatah
0 Steffen0 Cheatah
Hallo,
ich möchte mit regulären Ausdrücken eine XML Datei auswerten.
Innerhalb des XMLs möchte ich z.B. alle Element "XXX" finden die ein Attribut "YYY" haben.
Der regüläre Ausdruck dafür ist ja nicht weiter schwer.
Allerdings kann das XML auch ein Scriptelement haben, welches Scriptcode beinhaltet.
Das Scriptelement ist mit <![CDATA[ ]]> gekennzeichnet.
Auf diese Zeichenfolge kann man sicher auch prüfen, ich frage mich allerdings wie ich es anstelle, wenn das Dokument z.B. so aussieht:
<script>
<![CDATA[
var a = "]]>";
var b = "]]></script>";
var c = '<element attr="123" />';
]]>
</script>
<element attr="123" />
Was ich finden möchte ist hoffentlich klar: Nur das Element namens element.
Doch wie parse ich das Dokument am besten (mit Hilfe regulärer Ausdrücke), um nicht mit dem Inhalt des Scriptelements durcheinander zu kommen.
Gruß!
<script>
<![CDATA[
var a = "]]>";
var b = "]]></script>";
var c = '<element attr="123" />';
]]>
</script>
<element attr="123" />
scheinbar hat der SelfHTML Parser das gleiche Problem, wenn man die Einfärbung sieht...
Hi,
scheinbar hat der SelfHTML Parser das gleiche Problem, wenn man die Einfärbung sieht...
kein Problem - er erkennt völlig korrekt das Ende Deines CDATA-Bereiches. Verändere Deinen JavaScript-Code, so dass die Zeichenkette "]]>" nicht mehr vorkommt.
Cheatah
<script>
<![CDATA[
var a = "]]>";
var b = "]]></script>";
var c = '<element attr="123" />';
]]>
</script>
<element attr="123" />
Hi,
ich glaube ja, dass das ]]> nicht innerhalb des CDATA vorkommen darf.
Versuche das `>`{:.language-html} zu maskieren. `>`{:.language-html}
Grüße
Hi,
Versuche das
>
zu maskieren.
innerhalb von CDATA-Bereichen existiert keine Möglichkeit der Maskierung. Ein ">" in einem CDATA-Bereich ist identisch mit einem "&gt;" außerhalb desselben.
Cheatah
Hallo,
innerhalb von CDATA-Bereichen existiert keine Möglichkeit der Maskierung. Ein ">" in einem CDATA-Bereich ist identisch mit einem "&gt;" außerhalb desselben.
das heißt, wenn ich in einem CDATA-Bereich die exakte Zeichenfolge ]]> unterbringen möchte, habe ich einfach Pech gehabt?
So long,
Martin
Hi,
das heißt, wenn ich in einem CDATA-Bereich die exakte Zeichenfolge ]]> unterbringen möchte, habe ich einfach Pech gehabt?
Nö.
Du mußt es dann halt aufsplitten.
Beispiel: <![CDATA[]]]]><![CDATA[>]]>
Der erste CDATA-Bereich enthält die ]], der zweite das >
cu,
Andreas
@@Der Martin:
nuqneH
das heißt, wenn ich in einem CDATA-Bereich die exakte Zeichenfolge ]]> unterbringen möchte, habe ich einfach Pech gehabt?
Nein.
Wie immer heißt das Zauberwort: escape. Wie immer kontextspezifisch.
Der Kontext ist hier JavaScript. Also bspw. das '>' als '\u003E'
:
<script type="text/javascript">
[code lang=javascript]//[code lang=xml]<![CDATA[
var a = "]]\u003E";
var b = "]]\u003E</script>";
var c = '<element attr="123" />';
//]]>
[/code]
</script>[/code]
Qapla'
Hallo Gunnar,
das heißt, wenn ich in einem CDATA-Bereich die exakte Zeichenfolge ]]> unterbringen möchte, habe ich einfach Pech gehabt?
Nein.
stimmt, Andreas hat ja schon eine (DIE?) Lösung genannt.
Wie immer heißt das Zauberwort: escape. Wie immer kontextspezifisch.
Der Kontext ist hier JavaScript.
Nein. Ich schrieb bewusst nur von CDATA-Bereichen, nicht von Javascript innerhalb von CDATA.
Also bspw. das '>' als
'\u003E'
:
Das hätte ich auch gewusst, danke. Aber ich wollte es allgemeingültig.
So long,
Martin