CDATA in an xsl transformation

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Tjerk Wolterink

    CDATA in an xsl transformation

    Hello all,

    I've a problem:

    i've an xsl file that has a template that contains
    the following:

    <script type="text/javascript">
    <![CDATA[

    a long javascript with < > characters, like:
    for(var i=0;i<xmlDataFu nctions.length; i++) {
    }

    ]]>>
    </script>


    Ok when this is transformed i get the following:

    <script type="text/javascript">

    a long javascript with &lt; &gt; characters, like:
    for(var i=0;i&lt;xmlDat aFunctions.leng th;i++) {
    }

    </script>


    But i dont want this, because javascript does not now &lt; and &gt;
    So i used:

    <script type="text/javascript"><xs l:text disable-output-escaping="yes"> <![CDATA[

    a long javascript with &lt; &gt; characters, like:
    for(var i=0;i&lt;xmlDat aFunctions.leng th;i++) {
    }

    ]]></xsl:text></script>

    Ok now i get:

    <script type="text/javascript">

    a long javascript with < > characters, like:
    for(var i=0;i<xmlDataFu nctions.length; i++) {
    }

    </script>

    But because it is all part of an web-application i want to
    get valid xhtml. This is not valid.So what i want is this as output:


    <script type="text/javascript">
    <![CDATA[

    a long javascript with < > characters, like:
    for(var i=0;i<xmlDataFu nctions.length; i++) {
    }

    ]]>
    </script>



    How do i do that with xslt??
  • Joris Gillis

    #2
    Re: CDATA in an xsl transformation

    Tempore 18:12:59, die Friday 07 January 2005 AD, hinc in foro {comp.text.xml} scripsit Tjerk Wolterink <tjerk@wolterin kwebdesign.com> :
    [color=blue]
    > But because it is all part of an web-application i want to
    > get valid xhtml. This is not valid.So what i want is this as output:
    ><script type="text/javascript">
    > <![CDATA[
    >a long javascript with < > characters, like:
    > for(var i=0;i<xmlDataFu nctions.length; i++) {
    > }
    >]]>
    > </script>
    >[/color]

    Just specify 'cdata-section-elements' attribute

    <xsl:output cdata-section-elements="scrip t" method="xml"/>


    regards,
    --
    Joris Gillis (http://www.ticalc.org/cgi-bin/acct-v...i?userid=38041)
    "Quot capita, tot sententiae" - Terentius , Phormio 454

    Comment

    • Tjerk Wolterink

      #3
      Re: CDATA in an xsl transformation

      Joris Gillis wrote:[color=blue]
      > Tempore 18:12:59, die Friday 07 January 2005 AD, hinc in foro
      > {comp.text.xml} scripsit Tjerk Wolterink <tjerk@wolterin kwebdesign.com> :
      >[color=green]
      >> But because it is all part of an web-application i want to
      >> get valid xhtml. This is not valid.So what i want is this as output:
      >> <script type="text/javascript">
      >> <![CDATA[
      >> a long javascript with < > characters, like:
      >> for(var i=0;i<xmlDataFu nctions.length; i++) {
      >> }
      >> ]]>
      >> </script>
      >>[/color]
      >
      > Just specify 'cdata-section-elements' attribute
      >
      > <xsl:output cdata-section-elements="scrip t" method="xml"/>
      >
      >
      > regards,[/color]

      ok i understand, but now i want the output to be:


      <script type="text/javascript">
      //<![CDATA[
      a long javascript with < > characters, like:
      for(var i=0;i<xmlDataFu nctions.length; i++) {
      }
      //]]>
      </script>


      Those // are javascript comments, these are neccesary because some old browsers
      do support javascript but do not support xml, so i have to comment them out with //
      ..

      How would you do that?

      Comment

      • Joris Gillis

        #4
        Re: CDATA in an xsl transformation

        Tempore 11:05:57, die Saturday 08 January 2005 AD, hinc in foro {comp.text.xml} scripsit Tjerk Wolterink <tjerk@wolterin kwebdesign.com> :
        [color=blue]
        > <script type="text/javascript">
        > //<![CDATA[
        > a long javascript with < > characters, like:
        > for(var i=0;i<xmlDataFu nctions.length; i++) {
        > }
        > //]]>
        > </script>
        >
        > Those // are javascript comments, these are neccesary because some old browsers
        > do support javascript but do not support xml, so i have to comment them out with //
        >
        > How would you do that?[/color]

        To the best of my knowledge, XSLT1.0 does not provide a way to create a CDATA section from only a part of a text node.

        I'm not really convinced that there would ever be need of such output, but if you really need it and don't mind dirty hacks, you could use something like this:

        <?xml version='1.0' encoding="UTF-8"?>
        <xsl:styleshe et version="1.0" xmlns:xsl="http ://www.w3.org/1999/XSL/Transform">

        <xsl:output method="html"/>

        <xsl:template match="script">

        <script type="text/javascript">
        <![CDATA[
        //<![CDATA[
        a long javascript with < > characters, like:
        for(var i=0;i<xmlDataFu nctions.length; i++) {
        }
        //]]>
        ]]>
        </script>

        </xsl:template>

        </xsl:stylesheet>


        regards,
        --
        Joris Gillis (http://www.ticalc.org/cgi-bin/acct-v...i?userid=38041)
        Vincit omnia simplicitas
        Keep it simple

        Comment

        • Joris Gillis

          #5
          Re: CDATA in an xsl transformation

          > <script type="text/javascript">[color=blue]
          > //<![CDATA[
          > a long javascript with < > characters, like:
          > for(var i=0;i<xmlDataFu nctions.length; i++) {
          > }
          > //]]>
          > </script>
          >
          > How would you do that?[/color]

          If the output type of your XSL is set to 'xml' (to produce xhtml) , I think this problem is literally unsolvable.

          --
          Joris Gillis (http://www.ticalc.org/cgi-bin/acct-v...i?userid=38041)
          Vincit omnia simplicitas
          Keep it simple

          Comment

          • Tjerk Wolterink

            #6
            Re: CDATA in an xsl transformation

            Joris Gillis wrote:
            [color=blue][color=green]
            >> <script type="text/javascript">
            >> //<![CDATA[
            >> a long javascript with < > characters, like:
            >> for(var i=0;i<xmlDataFu nctions.length; i++) {
            >> }
            >> //]]>
            >> </script>
            >>
            >> How would you do that?[/color]
            >
            >
            > If the output type of your XSL is set to 'xml' (to produce xhtml) , I
            > think this problem is literally unsolvable.
            >[/color]

            Thanks for your time, i already thought it was difficult to solve, but
            i want both be xhtml-valid and cross-browser, those things collide.

            On solution is to put the javascript in a separe js file and include it using <script src=""/>
            But its a really page specific javascript so therefore i want to include it inline.

            But anyways, thanks.

            Comment

            • Joris Gillis

              #7
              Re: CDATA in an xsl transformation

              Tempore 11:49:41, die Saturday 08 January 2005 AD, hinc in foro {comp.text.xml} scripsit Joris Gillis <roac@pandora.b e>:
              [color=blue][color=green]
              >> <script type="text/javascript">
              >> //<![CDATA[
              >> a long javascript with < > characters, like:
              >> for(var i=0;i<xmlDataFu nctions.length; i++) {
              >> }
              >> //]]>
              >> </script>
              >>
              >> How would you do that?[/color]
              >
              > If the output type of your XSL is set to 'xml' (to produce xhtml) , I think this problem is literally unsolvable.
              >[/color]
              Forget what I said, I was plain wrong...

              This is a working - but rather ugly - solution:

              <?xml version='1.0' encoding="UTF-8"?>
              <xsl:styleshe et version="1.0" xmlns:xsl="http ://www.w3.org/1999/XSL/Transform">

              <xsl:output method="xml"/>

              <xsl:template match="/">
              <script type="text/javascript">
              <xsl:text disable-output-escaping="yes">
              <![CDATA[
              //<![CDATA[
              a long javascript with < > characters, like:
              for(var i=0;i<xmlDataFu nctions.length; i++) {
              }
              //]]>
              ]]>
              </xsl:text>
              </script>
              </xsl:template>

              </xsl:stylesheet>

              --
              Joris Gillis (http://www.ticalc.org/cgi-bin/acct-v...i?userid=38041)
              Vincit omnia simplicitas
              Keep it simple

              Comment

              • Henri Sivonen

                #8
                Re: CDATA in an xsl transformation

                In article <opsj95m4dbyf9v 9r@news.pandora .be>,
                "Joris Gillis" <roac@pandora.b e> wrote:
                [color=blue]
                > To the best of my knowledge, XSLT1.0 does not provide a way to create a CDATA
                > section from only a part of a text node.
                >
                > I'm not really convinced that there would ever be need of such output,[/color]

                There is no need when the output is subjected to proper XML processing.

                Producing XHTML with XSLT and serving it as text/html without a
                specialized Appendix C converter is a bad idea. Using inline style
                sheets or scripts in such a situation is an even worse idea.

                --
                Henri Sivonen
                hsivonen@iki.fi

                Mozilla Web Author FAQ: http://mozilla.org/docs/web-developer/faq.html

                Comment

                • Peter Flynn

                  #9
                  Re: CDATA in an xsl transformation

                  Tjerk Wolterink wrote:
                  [color=blue]
                  > Hello all,
                  >
                  > I've a problem:
                  >
                  > i've an xsl file that has a template that contains
                  > the following:
                  >
                  > <script type="text/javascript">
                  > <![CDATA[
                  >
                  > a long javascript with < > characters, like:
                  > for(var i=0;i<xmlDataFu nctions.length; i++) {
                  > }
                  >
                  > ]]>>
                  > </script>[/color]

                  FAQ.


                  ///Peter
                  --
                  "The cat in the box is both a wave and a particle"
                  -- Terry Pratchett, introducing quantum physics in _The Authentic Cat_

                  Comment

                  Working...