[XSL/Jscript] Mixen van scripts en xsl

Pagina: 1
Acties:

  • zoepercavia
  • Registratie: September 2001
  • Laatst online: 26-12-2025
ik wil graag een jscript functie in mn xsl opnemen zodat ik formulieren kan checken als ze ingezonden worden. Nu meen ik mij te herinneren dat het dan zo moest:
code:
1
2
3
4
5
<script>
<![CDATA[
//hier jscript code
]]>
</script>

gaat allemaal heel leuk, alleen die Cdata sectie zet & om naar & en dat ik vind wat minder leuk. '&&' (logical AND) werkt dan dus niet meer, iemand een id hoe het wel goed gaat?

Panacea.NL als je geinteresserd bent in IT en Geneeskunde!


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
zoepercavia: alleen die Cdata sectie zet & om naar & en dat ik vind wat minder leuk. '&&' (logical AND) werkt dan dus niet meer, iemand een id hoe het wel goed gaat?
Hum, volgens mij zouden die operatoren gewoon moeten werken om dat & tenslotte slechts een stukje syntax voor & is. Dit klinkt dus eigenlijk meer als een browser-probleem als het inderdaad niet werkt.

Eventueel kan je iets doen moet disable-output-escaping, maar je loopt grote kans dat je resultaat XML dan niet meer well-formed is.

De makkelijkste oplossing is echter nog wel om je scripts gewoon in externe bestanden te zetten als dat mogelijk is voor jouw situatie. Je hebt dan helemaal nergens last meer van :) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • zoepercavia
  • Registratie: September 2001
  • Laatst online: 26-12-2025
hmm... in aparte bestanden zetten kan wel, maar komt de overzichtelijkheid niet ten goede en is een beetje onzinnig in dit geval omdat het gaat om specifieke form check scripts.

overigens zegt deze link dat alles binnen CData ignored wordt door de parser (http://www.w3schools.com/xml/xml_cdata.asp), dit dacht ik ook wel. Browser probleem is het ook niet, zowel Mozilla als IE hebben && in de source staan...

ik snap er geen kut van...

Panacea.NL als je geinteresserd bent in IT en Geneeskunde!


  • tomato
  • Registratie: November 1999
  • Niet online
mbravenboer: De makkelijkste oplossing is echter nog wel om je scripts gewoon in externe bestanden te zetten als dat mogelijk is voor jouw situatie. Je hebt dan helemaal nergens last meer van :) .
Let er op dat Internet Explorer 6 het als volgt wil zien:
code:
1
<script src="script.js" type="text/javascript"></script>

En niet zo:
code:
1
<script src="script.js" type="text/javascript" />

|:(

Terwijl het element zonder inhoud door veel XSLT processors standaard tot de <script /> vorm wordt omgezet (wat overigens gewoon correct is)...


Scheelt je misschien weer wat debuggen ;)

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
CDATA sections worden niet genegeerd, maar worden letterlijk opgevat zoals je het intikt: de inhoud wordt dus niet geparsed en je kan er daardoor bijvoorbeeld XML constructies in opnemen die gewoon als tekst bedoeld zijn (zoals &).

In een CDATA section kan je daarom gewoon & schrijven, wat in de rest van een XML document niet is toegestaan: daar moet je & schrijven. Voor een XML parser zou het niet uit mogen maken of er & in een CDATA section staat of & in een normale tekst en daarom zet je XSL engine gewoon alles om naar geescaped materiaal.

Als je toch graag CDATA sections wilt moet je het "cdata-section-elements" attribuut van het output element gebruiken om aan te geven waar je CDATA sections wilt. Ik denk dat een handleiding hiervoor makkelijk te vinden moet zijn met Google :) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
tomato: Let er op dat Internet Explorer 6 het als volgt wil zien
Owh ja, dat was ook nog een lekkere ja :X .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • zoepercavia
  • Registratie: September 2001
  • Laatst online: 26-12-2025
hmm, mijn cdata staat in de XSL, in principe moet ie dus als ik && typ ook na het transformen && er uit gooien, maar hij doet dus && :(

alle relevante data, gaat om de email test regel (&& formulier.email.value.length), deze stylesheet wordt geladen in ASP en daarna over een XML heen geschopt...
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?xml version='1.0'?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml">
<xsl:output method="html" indent="yes" encoding="iso-8859-1" doctype-public="-//W3C//DTD XHTML 1.0//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>
<xsl:include href="../../../layout/panacea/standaard.xsl" />

<xsl:template match="pagina/content/gebruiker">
    <script language="javascript">
        <![CDATA[ 
      function formCheck(formulier) {
          var go = 1;
          var errorString = "";
          
          //regexpen
          var reg_email1 = /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/;
            var reg_email2 = /^.+\@(\\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/; 
            
          //controle
          if (formulier.nickNaam.value.length == 0) {go=0;errorString += "Geen nickNaam ingevuld\n"}
          if ((reg_email1.test(formulier.email.value) || !reg_email2.test(formulier.email.value)) && formulier.email.length != 0) {go=0;errorString+= "U heeft geen geldig e-mail adres ingevuld\n"}
            if (formulier.wwnogeenkeer.value != formulier.wachtwoord.value) {go=0;errorString += "Wachtwoorden zijn niet hetzelfde"}
          if (formulier.wwBevestig.value.length == 0) {go=0;errorString += "Geen wachtwoord ter bevestiging ingevuld"}
          
          //return
            if (errorString != "") {alert(errorString);}
            return (go==1)?true:false;
          
        }
        ]]>
    </script>

Panacea.NL als je geinteresserd bent in IT en Geneeskunde!


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Omdat dit toch wel een faq is ondertussen heb ik maar even een voorbeeld gemaakt:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
<?xml version="1.0"?>

<xsl:transform version="1.0"
            xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
            xmlns="http://www.w3.org/1999/xhtml"
            xmlns:html="http://www.w3.org/1999/xhtml">

  <xsl:output   method="xml" indent="yes" encoding="UTF-8"
      doctype-public="-//W3C//DTD XHTML 1.1//EN"
                doctype-system="http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"
      cdata-section-elements="html:script"/>

  <xsl:template match="/">
    <html>
    <head>
      <title>Ancestor example</title>
    </head>

    <script>
      <xsl:text disable-output-escaping="yes">
        <![CDATA[ Blaat && Blaat <blaat> ]]>
      </xsl:text>
    </script>

    <body>
      <table class="main">
        <tbody>
        <xsl:apply-templates select="folder"/>
        </tbody>
      </table>
    </body>
    </html>
  </xsl:template>

  <xsl:template match="folder|file">
    <tr>
    <xsl:apply-templates select="ancestor::folder" mode="dirty-jump"/>

    <td>
      <xsl:value-of select="@name"/>
    </td>
    </tr>

    <xsl:apply-templates select="folder|file"/>
  </xsl:template>

  <xsl:template match="folder|node" mode="dirty-jump">
    <td>-</td>    
  </xsl:template>

</xsl:transform>

Het gaat uiteraard alleen om de output tag en de script met de xsl:text.

Resultaat:
code:
1
2
3
<script><![CDATA[
         Blaat && Blaat <blaat> 
      ]]></script>

Netjes he? :)

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
zoepercavia: hmm, mijn cdata staat in de XSL, in principe moet ie dus als ik && typ ook na het transformen && er uit gooien, maar hij doet dus && :(
De kern van mijn verhaal is juist dat dat hetzelfde is :o .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • zoepercavia
  • Registratie: September 2001
  • Laatst online: 26-12-2025
bingo!
bedankt voor de snelle reacties, ik had wel al <xsl:text disable-output-escaping="yes"> gebruikt, maar toen ging et mis op well-formedness. Het mixen met Cdata was ik nog niet opgenomen...

Thx...

weer wat geleerd...

Panacea.NL als je geinteresserd bent in IT en Geneeskunde!

Pagina: 1