Christian S.: Mit reg. Ausdrücken XML parsen + CDATA berücksichtigen

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ß!

  1. <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...
    
    1. 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

      --
      X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
      X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
      X-Will-Answer-Email: No
      X-Please-Search-Archive-First: Absolutely Yes
  2. <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. `&gt;`{:.language-html}  
      
    Grüße
    
    1. Hi,

      Versuche das > zu maskieren.

      innerhalb von CDATA-Bereichen existiert keine Möglichkeit der Maskierung. Ein "&gt;" in einem CDATA-Bereich ist identisch mit einem "&amp;gt;" außerhalb desselben.

      Cheatah

      --
      X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
      X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
      X-Will-Answer-Email: No
      X-Please-Search-Archive-First: Absolutely Yes
      1. Hallo,

        innerhalb von CDATA-Bereichen existiert keine Möglichkeit der Maskierung. Ein "&gt;" in einem CDATA-Bereich ist identisch mit einem "&amp;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

        --
        Ich stehe eigentlich gern früh auf.
        Außer morgens.
        1. 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

          --
          Warum nennt sich Andreas hier MudGuard?
          O o ostern ...
          Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
        2. @@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'

          --
          Alle Menschen sind klug. Die einen vorher, die anderen nachher. (John Steinbeck)
          1. 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

            --
            Dieser Satz wurde in mühsamer Kleinstarbeit aus einzelnen Wörtern zusammengesetzt.
              (Hopsel)