XSL &, & en &

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb een xsl template met als output xhtml via de volgende doctype:

XML:
1
<xsl:output method="xml" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" indent="yes"/>


In deze xsl heb ik een stukje javascript staan:

code:
1
2
3
4
5
var test = true;
var test2 = <xsl:value-of select="/test2" />;
if(test && test2) {
    alert("test2 = " + test2);
}


De output van dit bestand (dus na de xsl transform in php) is :

JavaScript:
1
2
3
4
5
var test = true;
var test2 = true;
if(test &amp;&amp; test2) {
    alert("test2 = " + test2);
}


Hij vertaalt de & #38; dus naar & amp;. Hierdoor wordt de javascript niet goed uitgevoerd. Hoe kan ik dit oplossen?

[ Voor 0% gewijzigd door Verwijderd op 04-09-2009 18:18 . Reden: foutje met code tags ]


Acties:
  • 0 Henk 'm!

  • RAJH
  • Registratie: Augustus 2001
  • Niet online
Probeer eens de code tussen CDATA tags te zetten.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hmmm... Dat werkt niet. Op één of andere manier blijft 't dan fout gaan (hij blijft de & tekens etc vertalen naar & amp;

Ik heb het nu zo opgelost, niet echt een mooie oplossing, maar het werkt wel. Iemand andere suggesties?

code:
1
2
3
4
5
6
7
var test2 = <xsl:value-of select="/test2" />;
<xsl:comment><![CDATA[  
var test = true;
if(test && test2) {
    alert("test2 = " + test2);
}
]]> </xsl:comment>


Dit wordt getransformed tot dit:

JavaScript:
1
2
3
4
5
6
7
var test2 = true;
<!-- 
var test = true;
if(test && test2) {
    alert("test2 = " + test2);
}
-->

Acties:
  • 0 Henk 'm!

  • Recursio
  • Registratie: Mei 2006
  • Laatst online: 01-09 18:41
Als het niet teveel werk is en als je er geen bezwaar tegen hebt:

Kun je de "simplest version" van je code posten waarbij je je probleem kunt repreduceren?

Dus: file.php, file.xml & file.xsl?

Wat gebruik je om de XML via XSL te transformeren? (Welke engine, dus, zoals xalan, sablotron...)

Welk OS gebruik je?

[ Voor 7% gewijzigd door Recursio op 04-09-2009 21:34 . Reden: Vervolduidelijkering ]


Acties:
  • 0 Henk 'm!

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

Verwijderd schreef op vrijdag 04 september 2009 @ 21:11:
Hmmm... Dat werkt niet. Op één of andere manier blijft 't dan fout gaan (hij blijft de & tekens etc vertalen naar & amp;

Ik heb het nu zo opgelost, niet echt een mooie oplossing, maar het werkt wel. Iemand andere suggesties?

code:
1
2
3
4
5
6
7
var test2 = <xsl:value-of select="/test2" />;
<xsl:comment><![CDATA[  
var test = true;
if(test && test2) {
    alert("test2 = " + test2);
}
]]> </xsl:comment>


Dit wordt getransformed tot dit:

JavaScript:
1
2
3
4
5
6
7
var test2 = true;
<!-- 
var test = true;
if(test && test2) {
    alert("test2 = " + test2);
}
-->
Waarom die <xls:comment> ?

Going for adventure, lots of sun and a convertible! | GMT-8


Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Omdat hij anders nog &amp; eruit krijg.. ;) CDATA werkt alleen voor input, voor de output van de Javascript zonder escaping is anders disable-output-escaping nodig.

En dan krijg je nog het probleem dat && in xhtml eigenlijk niet zomaar mag, dus dat er alsnog een comment of CDATA omheen moet staan, wat weer in Javascript-comments moet voor IE.De huidige oplossing is dus helemaal niet zo gek. Misschien nog even wat extra //'s erbij.

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Recursio schreef op vrijdag 04 september 2009 @ 21:30:
Als het niet teveel werk is en als je er geen bezwaar tegen hebt:

Kun je de "simplest version" van je code posten waarbij je je probleem kunt repreduceren?

Dus: file.php, file.xml & file.xsl?

Wat gebruik je om de XML via XSL te transformeren? (Welke engine, dus, zoals xalan, sablotron...)

Welk OS gebruik je?
Dat is wel redelijk wat werk idd ;( Qua voorbeeld maakt 't eigenlijk niks uit. Dit is precies wat ik wil (maar dan met andere javascriptcode).

Ik gebruik de standaard XSL transformer van PHP 5.0. Geen idee hoe die heet.

Als OS gebruik ik nu windows xp i.c.m. apache, maakt dat uit voor het resultaat?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
pedorus schreef op vrijdag 04 september 2009 @ 22:36:
Omdat hij anders nog &amp; eruit krijg.. ;) CDATA werkt alleen voor input, voor de output van de Javascript zonder escaping is anders disable-output-escaping nodig.

En dan krijg je nog het probleem dat && in xhtml eigenlijk niet zomaar mag, dus dat er alsnog een comment of CDATA omheen moet staan, wat weer in Javascript-comments moet voor IE.De huidige oplossing is dus helemaal niet zo gek. Misschien nog even wat extra //'s erbij.
Hoe kan je de disable-output-escaping gebruiken in javascript?

<script disable-output-escaping="true"></script> had ik volgens mij al geprobeerd, maar werd gewoon in de html gezet...

Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Verwijderd schreef op zaterdag 05 september 2009 @ 09:16:
Hoe kan je de disable-output-escaping gebruiken in javascript?
Je gebruikt het in XSLT.
<script disable-output-escaping="true"></script> had ik volgens mij al geprobeerd, maar werd gewoon in de html gezet...
XSLT:
1
2
3
4
5
6
7
<xsl:text disable-output-escaping="yes"><![CDATA[
<script type="text/javascript">
<!--
alert(true)
//-->
</script>
]]></xsl:text>

Nou gebruik ik eigenlijk nooit xhtml, maar hier staat een waarschuwing dat je comments niet meer zou moeten gebruiken in xhtml-script-tags. Dus dan zou het zoiets worden:
XSLT:
1
2
3
4
5
6
7
<xsl:text disable-output-escaping="yes">
&lt;script type="text/javascript"&gt;
<![CDATA[
// <![CDATA[
alert(true)
// ]]]]>&gt;
&lt;/script&gt;</xsl:text>

Alles ongetest ;)

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten

Pagina: 1