Arbeitsloser: "]]>" in CDATA-Abschnitten

Hallo,

Wie wird die Zeichenfolge "]]>" (ohne Anführungszeichen) in CDATA-Bereichen maskiert ?

Gruß, der Arbeitslose

  1. hi,

    Wie wird die Zeichenfolge "]]>" (ohne Anführungszeichen) in CDATA-Bereichen maskiert ?

    Wenn sie den CDATA-Bereich nicht beenden soll - so, dass sie nicht aus den Zeichen ]]> besteht.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
  2. Hallo,

    Wie wird die Zeichenfolge "]]>" (ohne Anführungszeichen) in CDATA-Bereichen maskiert ?

    Du kannst es mit:  "]]gt;" machen (später kommt dann darauf an, wie du den Inhalt vom CDATA weiterverarbeitest).

    Grüße
    Thomas

    1. Hallo,

      Wie wird die Zeichenfolge "]]>" (ohne Anführungszeichen) in CDATA-Bereichen maskiert ?

      Du kannst es mit:  "]]gt;" machen

      Dann wird das „gt;“ aber auch so im Browser angezeigt/verarbeitet.

      später kommt dann darauf an, wie du den Inhalt vom CDATA weiterverarbeitest

      Klar kann man sich serverseitig sein eigenes (X)ML schreiben, aber 1. wurde nicht erwähnt, dass es sich um solches handelt und 2. halte ich es nicht für sinnvoll, von XML einige Teile abzuändern. CDATA-Bereiche sind nunmal für blanken Text gedacht und nicht für Entities.

      @Arbeitsloser:

      Du könntest ein Leerzeichen ohne Breite (natürlich nicht als Entity) in die Zeichenfolge einfügen. Einziger Nebeneffekt: Der Browser könnte an dieser Stelle einen Zeilenumbruch machen.

      Damit du das Zeichen nicht erst mühsam erzeugen musst, hier der einfügbare Zeichensalat: ]]​>

      mfg. Daniel

      1. Hallo,

        Wie wird die Zeichenfolge "]]>" (ohne Anführungszeichen) in CDATA-Bereichen maskiert ?

        Du kannst es mit:  "]]gt;" machen

        Dann wird das „gt;“ aber auch so im Browser angezeigt/verarbeitet.

        Korrekt, mein Fehler. Es sollte natürlich  "]]>" sein.

        später kommt dann darauf an, wie du den Inhalt vom CDATA weiterverarbeitest

        Klar kann man sich serverseitig sein eigenes (X)ML schreiben, aber 1. wurde nicht erwähnt, dass es sich um solches handelt

        Hat damit auch nicht zu tun.

        und 2. halte ich es nicht für sinnvoll, von XML einige Teile abzuändern. CDATA-Bereiche sind nunmal für blanken Text gedacht und nicht für Entities.

        Das ist nicht wirklich korrekt, um nicht zu sagen: falsch.
        Man kann im CDATA durchaus ganze Elemente etc. hineinschreiben und Entities sind durchaus Teil der Möglichkeiten von XML.

        Damit du das Zeichen nicht erst mühsam erzeugen musst, hier der einfügbare Zeichensalat: ]]​>

        Damit würde er den CDATA-Bereich beenden.

        Grüße
        Thomas

        1. Hallo,

          Wie wird die Zeichenfolge "]]>" (ohne Anführungszeichen) in CDATA-Bereichen maskiert ?

          Du kannst es mit:  "]]gt;" machen

          Dann wird das „gt;“ aber auch so im Browser angezeigt/verarbeitet.

          Korrekt, mein Fehler. Es sollte natürlich  "]]>" sein.

          Und das wird genau so ausgegeben!

          und 2. halte ich es nicht für sinnvoll, von XML einige Teile abzuändern. CDATA-Bereiche sind nunmal für blanken Text gedacht und nicht für Entities.

          Das ist nicht wirklich korrekt, um nicht zu sagen: falsch.

          Nö.

          Man kann im CDATA durchaus ganze Elemente etc. hineinschreiben und Entities sind durchaus Teil der Möglichkeiten von XML.

          Klar. Nur werden sie eben nicht geparst und das ist ja auch der Sinn von CDATA.

          Damit du das Zeichen nicht erst mühsam erzeugen musst, hier der einfügbare Zeichensalat: ]]​>

          Damit würde er den CDATA-Bereich beenden.

          Hast du's ausprobiert? Hier der Beweis: XML_und_CDATA.

          mfg. Daniel

          1. Hallo,

            Wie wird die Zeichenfolge "]]>" (ohne Anführungszeichen) in CDATA-Bereichen maskiert ?
            Du kannst es mit:  "]]gt;" machen
            Dann wird das „gt;“ aber auch so im Browser angezeigt/verarbeitet.
            Korrekt, mein Fehler. Es sollte natürlich  "]]>" sein.
            Und das wird genau so ausgegeben!

            Ja, und genau deshalb sagte ich: "später kommt dann darauf an, wie du den Inhalt vom CDATA weiterverarbeitest"
            Was heisst, z.B. beim Transformation in ein anderes Format.

            und 2. halte ich es nicht für sinnvoll, von XML einige Teile abzuändern. CDATA-Bereiche sind nunmal für blanken Text gedacht und nicht für Entities.
            Das ist nicht wirklich korrekt, um nicht zu sagen: falsch.

            Nö.

            Wie du meinst.

            Man kann im CDATA durchaus ganze Elemente etc. hineinschreiben und Entities sind durchaus Teil der Möglichkeiten von XML.

            Klar. Nur werden sie eben nicht geparst und das ist ja auch der Sinn von CDATA.

            Das ist korrekt. Wo siehst du dabei ein Problem mit dem gesagten?

            Damit du das Zeichen nicht erst mühsam erzeugen musst, hier der einfügbare Zeichensalat: ]]​>

            Damit würde er den CDATA-Bereich beenden.

            Hast du's ausprobiert?

            Ja, das habe ich ausprobiert.

            Hier der Beweis: XML_und_CDATA.

            Was möchtest du damit beweisen? Verwechsel bitte XHTML im Browser nicht mit XML. Darber hinausst ist das nicht nur ungültiges XHTML (was dem Browser an sich egal ist, er stellt es bloß dar), sondern auch noch inkorrektes XML.

            »CDATA sections begin with the string "<![CDATA[" and end with the string "]]>"«
            http://www.w3.org/TR/2006/REC-xml-20060816/#dt-cdsection

            Grüße
            Thomas

            1. Hallo,

              Wenn du zwischen ]] und > ein Leerzeichen machst, geht das natürlich (das Leerzeichen habe ich vorher übersehen), wobei ich nicht weiss, ob das wirklich die Frage war.

              Grüße
              Thomas

            2. Hallo,

              Wie wird die Zeichenfolge "]]>" (ohne Anführungszeichen) in CDATA-Bereichen maskiert ?
              Du kannst es mit:  "]]gt;" machen
              Dann wird das „gt;“ aber auch so im Browser angezeigt/verarbeitet.
              Korrekt, mein Fehler. Es sollte natürlich  "]]&gt;" sein.
              Und das wird genau so ausgegeben!

              Ja, und genau deshalb sagte ich: "später kommt dann darauf an, wie du den Inhalt vom CDATA weiterverarbeitest"

              Und ich sagte ja bereits, dass man XML so weiterverarbeiten sollte, wie es das W3C empfiehlt.

              Wie du meinst.

              Man kann im CDATA durchaus ganze Elemente etc. hineinschreiben und Entities sind durchaus Teil der Möglichkeiten von XML.

              Klar. Nur werden sie eben nicht geparst und das ist ja auch der Sinn von CDATA.

              Das ist korrekt. Wo siehst du dabei ein Problem mit dem gesagten?

              Du möchtest ein > ausgeben aber schreibst die Zeichenfolge &gt; in den Code.

              Damit du das Zeichen nicht erst mühsam erzeugen musst, hier der einfügbare Zeichensalat: ]]​>

              Damit würde er den CDATA-Bereich beenden.

              Hast du's ausprobiert?

              Ja, das habe ich ausprobiert.

              Kopiert oder abgeschrieben? Letzteres sollte funktionieren - jedenfalls wenn du UTF-8 o.Ä. als Zeichenkodierung nutzt.

              Hier der Beweis: XML_und_CDATA.

              Verwechsel bitte XHTML im Browser nicht mit XML.

              Wo liegt denn da der Unterschied? Beide können einen Syntax-Error liefern.

              Darber hinausst ist das nicht nur ungültiges XHTML

              Warum?

              […] auch noch inkorrektes XML.

              Nö, das würde er mit einem Parse-Error quittieren.

              »CDATA sections begin with the string "<![CDATA[" and end with the string "]]>"«

              Ja - und das habe ich auch beachtet.

              mfg. Daniel

              1. Hallo,

                Wie wird die Zeichenfolge "]]>" (ohne Anführungszeichen) in CDATA-Bereichen maskiert ?
                Du kannst es mit:  "]]gt;" machen
                Dann wird das „gt;“ aber auch so im Browser angezeigt/verarbeitet.
                Korrekt, mein Fehler. Es sollte natürlich  "]]&gt;" sein.
                Und das wird genau so ausgegeben!

                Ja, und genau deshalb sagte ich: "später kommt dann darauf an, wie du den Inhalt vom CDATA weiterverarbeitest"

                Und ich sagte ja bereits, dass man XML so weiterverarbeiten sollte, wie es das W3C empfiehlt.

                Das W3C empfiehlt da ziemlich nichts.
                Du kannst im XSLT z.B: disable-output-escaping verwenden.

                Das ist korrekt. Wo siehst du dabei ein Problem mit dem gesagten?

                Du möchtest ein > ausgeben aber schreibst die Zeichenfolge &gt; in den Code.

                Ja, in _diesem_ Fall schon.

                Ja, das habe ich ausprobiert.

                Kopiert oder abgeschrieben? Letzteres sollte funktionieren - jedenfalls wenn du UTF-8 o.Ä. als Zeichenkodierung nutzt.

                Hier der Beweis: XML_und_CDATA.

                Verwechsel bitte XHTML im Browser nicht mit XML.

                Wo liegt denn da der Unterschied? Beide können einen Syntax-Error liefern.

                Das schon. Nur dass die Browser bei XHTML sich doch anders verhalten als bei XML. (wenn du die Dateien entsprechen vom Server auslieferst)

                Darber hinausst ist das nicht nur ungültiges XHTML

                Warum?

                Hast du die Seite validiert?  Die Fehlermeldung ist eindeutig.
                <http://validator.de.selfhtml.org/validate/?uri=http://danielrichter.drition.net/ST/Site-Tes
                ter.php?Site=XML_und_CDATA>
                http://validator.w3.org/check?uri=http%3A%2F%2Fdanielrichter.drition.net%2FST%2FSite-Tester.php%3FSite%3DXML_und_CDATA

                […] auch noch inkorrektes XML.

                Nö, das würde er mit einem Parse-Error quittieren.

                Würde er nicht. *

                »CDATA sections begin with the string "<![CDATA[" and end with the string "]]>"«

                Ja - und das habe ich auch beachtet.

                Wie gesagt: wenn das Leerzeichen zwischen ]] und > beabsichtigt war: OK.
                Ansonsten *): das erste ]]> beedent das CDATA, das was danach kommt ist für den Parser nur "Text" und in diesem ist > durchaus ohne Maskierung erlaubt. **
                Wobei gute Parser das zweite ]]> durchaus anmekern!

                -------------------
                <?xml version="1.0" encoding="UTF-8"?>
                <root>
                 <knotenmitchilds>
                  <child1>new1</child1>
                 </knotenmitchilds>
                 <![CDATA[

                <knotenmitchilds>
                  <child1>new1</child1>
                  <child2>new2</child2>
                  <child3>new3</child3>
                  <child4>new4</child4>
                 </knotenmitchilds>

                text text text
                 ]]>
                 <knotenmitchilds>
                  <child1>new1</child1>
                  <child2>new2</child2>
                 </knotenmitchilds>
                 text text text
                 ]]>
                </root>
                ----------------------------

                Meldung:
                SystemID: D:\test\Unbenannt1.xml
                Position: 22:2
                Beschreibung: The character sequence "]]>" must not appear in content unless used to mark the end of a CDATA section.

                Wogegen ein:
                ------------------------------
                <?xml version="1.0" encoding="UTF-8"?>
                <root>
                 <knotenmitchilds>
                  <child1>new1</child1>
                 </knotenmitchilds>
                 <![CDATA[

                <knotenmitchilds>
                  <child1>new1</child1>
                  <child2>new2</child2>
                  <child3>new3</child3>
                  <child4>new4</child4>
                 </knotenmitchilds>

                text text text
                 ]]&gt;
                 <knotenmitchilds>
                  <child1>new1</child1>
                  <child2>new2</child2>
                 </knotenmitchilds>
                 text text text
                 ]]>
                </root>
                --------------------------------

                Korrekt und wohlgeformt ist.

                Grüße
                Thomas

                1. Hallo,

                  Verwechsel bitte XHTML im Browser nicht mit XML.

                  Wo liegt denn da der Unterschied? Beide können einen Syntax-Error liefern.

                  Das schon. Nur dass die Browser bei XHTML sich doch anders verhalten als bei XML.

                  Du meinst, weil aktuelle Firefoxes XML-Dateien erst komplett laden müssen, bevor sie sie anzeigen? Sonst kann ich jedenfalls keine nennenswerten Unterschiede erkennen. Selbst der Mime-Type kann der Selbe sein.

                  wenn du die Dateien entsprechen vom Server auslieferst

                  Klar. XHTML muss man schon mit einem XML-Mime-Type ausliefern, was ich ja auch gemacht habe.

                  Darber hinausst ist das nicht nur ungültiges XHTML

                  Warum?

                  Hast du die Seite validiert?  Die Fehlermeldung ist eindeutig.
                  <http://validator.de.selfhtml.org/validate/?uri=http://danielrichter.drition.net/ST/Site-Tes
                  ter.php?Site=XML_und_CDATA>

                  OK, ich habe den Fehler jetzt behoben. Es lag schlichtweg daran, dass der <body> in XHTML-Strict nur Blockelemente enthalten darf.

                  […] auch noch inkorrektes XML.

                  Nö, das würde er mit einem Parse-Error quittieren.

                  Würde er nicht. *

                  Doch! Sonst hat er den Namen „XML-Fehler“ nicht verdient.

                  »CDATA sections begin with the string "<![CDATA[" and end with the string "]]>"«

                  Ja - und das habe ich auch beachtet.

                  Wie gesagt: wenn das Leerzeichen zwischen ]] und > beabsichtigt war: OK.

                  Das habe ich ja auch so angedeutet.

                  Ansonsten *): das erste ]]> beedent das CDATA, das was danach kommt ist für den Parser nur "Text" und in diesem ist > durchaus ohne Maskierung erlaubt. **
                  Wobei gute Parser das zweite ]]> durchaus anmekern!


                  <?xml version="1.0" encoding="UTF-8"?>
                  <root>
                  <knotenmitchilds>
                    <child1>new1</child1>
                  </knotenmitchilds>
                  <![CDATA[

                  <knotenmitchilds>
                    <child1>new1</child1>
                    <child2>new2</child2>
                    <child3>new3</child3>
                    <child4>new4</child4>
                  </knotenmitchilds>

                  text text text
                  ]]>
                  <knotenmitchilds>
                    <child1>new1</child1>
                    <child2>new2</child2>
                  </knotenmitchilds>
                  text text text
                  ]]>
                  </root>

                  Meldung:
                  SystemID: D:\test\Unbenannt1.xml
                  Position: 22:2
                  Beschreibung: The character sequence "]]>" must not appear in content unless used to mark the end of a CDATA section.

                  Die Seite verursacht auch einen Parse-Error in meinem Firefox.

                  Wogegen ein:

                  <?xml version="1.0" encoding="UTF-8"?>
                  <root>
                  <knotenmitchilds>
                    <child1>new1</child1>
                  </knotenmitchilds>
                  <![CDATA[

                  <knotenmitchilds>
                    <child1>new1</child1>
                    <child2>new2</child2>
                    <child3>new3</child3>
                    <child4>new4</child4>
                  </knotenmitchilds>

                  text text text
                  ]]&gt;
                  <knotenmitchilds>
                    <child1>new1</child1>
                    <child2>new2</child2>
                  </knotenmitchilds>
                  text text text
                  ]]>
                  </root>

                  Korrekt und wohlgeformt ist.

                  Dafür sieht man bei der Clientseitigen Verarbeitung aber auch die Zeichenfolge „]]&gt;“ in der Ausgabe, was nicht gewünscht ist.

                  mfg. Daniel

  3. Hi,

    Wie wird die Zeichenfolge "]]>" (ohne Anführungszeichen) in CDATA-Bereichen maskiert?

    Eine Möglichkeit wäre, die CDATA-Section in zwei CDATA-Sections zu zerteilen und einen Teil von ]]> in die erste und den anderen in die zweite zu packen, also so:
    <![CDATA[bla]]]><![CDATA[]>bla]]>
    oder
    <![CDATA[bla]]]]><![CDATA[>bla]]>

    Oder einen Teil der Zeichenfolge zwischen die CDATA-Sections, etwa so:
    <![CDATA[bla]]>]]<![CDATA[>bla]]>

    Ich bin mir im Moment nicht sicher, ob das Auswirkungen auf den Dom-Baum hat - tauchen CDATA-Sections als eigenständige (Text-)Knoten auf? Ggf. gibt es dann halt nicht einen Textnode, sondern zwei (bzw. drei bei der letzten Variante) für die CDATA-Section.

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    O o ostern ...
    Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
    1. Hallo,

      Eine Möglichkeit wäre, die CDATA-Section in zwei CDATA-Sections zu zerteilen und einen Teil von ]]> in die erste und den anderen in die zweite zu packen, also so:
      <![CDATA[bla]]]><![CDATA[]>bla]]>
      oder
      <![CDATA[bla]]]]><![CDATA[>bla]]>

      Sehr originelle Lösung, gefällt mir bisher am besten, mal ausprobieren

      Gruß, der Arbeitslose

    2. Hallo,

      Ich bin mir im Moment nicht sicher, ob das Auswirkungen auf den Dom-Baum hat - tauchen CDATA-Sections als eigenständige (Text-)Knoten auf?

      Ja. CDATA-Bereiche haben einen eigenen http://de.selfhtml.org/javascript/objekte/node.htm#node_type@title=nodeType und tauchen demzufolge bei Anwendung deines Beispiels mehrmals auf.

      mfg. Daniel

  4. Moin!

    Wie wird die Zeichenfolge "]]>" (ohne Anführungszeichen) in CDATA-Bereichen maskiert ?

    Das hängt wohl auch von der verarbeiten Software ab: Dieses Forum setzt ']]>' [ref:bug;82088@title=unmaskiert] ein, was darin resultiert, dass so lange dieser Beitrag im Feed lebt, mein Feedreader ungültiges XML bekommt.

    Schönes Wochenende,
    Robert