XSL code in Javascript
Rondra
- xsl
0 Thomas J.S.0 rondra0 Thomas J.S.0 rondra0 Thomas J.S.0 Rondra
Hallo!
Mein Problem ist folgendes:
ich habe eine js-datei, in der ich einige ausgaben mit xsl:value erzeuge. Gibt es eine möglichkeit xsl in js einzubetten ohne das lästige xsl:text zu benutzen? Folgendes:
function abdamit()
{
document.myForm.action='Seite.html?ziel=<xsl:value-of select="//eins/@ab"/>;';
}
so wie oben geht es natürlich nicht, es wird ein obj erwartet.
Ich habe aber teilweise sehr komplexe ausdrücke, sodass ich das so nicht unbedingt bilden will:
function abdamit()
{
<xsl:text disable-output-escaping="yes">
document.myForm.action='Seite.html?ziel=
</xsl:text>
<xsl:value-of select="//eins/@ab"/>
<xsl:text disable-output-escaping="yes">
;';
</xsl:text>
das 2. beispiel funktioniert zwar , aber wie gesagt bei meinen komplexeren scripten verliert man bald die übersicht.
Gibt es da eine einfachere Möglichkeit? Ich hoffe das war einigermassen verständlich...
vielen dank für jeden tipp!
lg
Rondra
}
Hallo,
ich habe eine js-datei, in der ich einige ausgaben mit xsl:value erzeuge.
Das zu glauben fällt jedem schwer. Du kannst garantiert in keine bestehede JavaScript Datei irgendwas mit XSL erzeugen.
Du kannst mit XSL eine JavaScript Datei oder einen <script>-Block für eine HTML-Seite erzeugen.
Gibt es eine möglichkeit xsl in js einzubetten ohne das lästige xsl:text zu benutzen? Folgendes:
function abdamit()
{
document.myForm.action='Seite.html?ziel=<xsl:value-of select="//eins/@ab"/>;';
}so wie oben geht es natürlich nicht, es wird ein obj erwartet.
Wenn du in einem XSL-Datei arbeitest, sollte das was oben steht funktionieren, es sei denn:
<xsl:value-of select="//eins/@ab"/> selektiert gar nichts, so dass es am Ende in der Tat keinen Wert für deinen "ziel" Parameter gibt.
das was value-of liefert ist schlichtweg was falsches.
du hast den gesamten JavaScript-code in einem <![CDATA[ ]]> Block, dann wird genau das : document.myForm.action='Seite.html?ziel=<xsl:value-of select="//eins/@ab"/>;'; im Script stehen.
Ich hoffe das war einigermassen verständlich...
Mehr oder weniger. Etwas genaure Angaben und ein wenig mehr als eine Zeile aus dem Code würde es erheblich leichter machen dir zu helfen.
Grüße
Thomas
Hallo,
hm, war missverständlich, geb ich zu. Mit
ich habe eine js-datei, in der ich einige ausgaben mit xsl:value erzeuge.
habe ich gemeint, dass ích eine xsl habe, die auf eine .js datei referenziert. Diese js-datei beinhaltet diese function, die aus der xsl heraus aufgerufen wird. es ist natürlich möcglich wie Du schriebst diese function in die xsl reinzuschreiben, aber damit erzeuge ich redundanzen, da ich die function auch in anderen xsls einsetzen muss.
deshalb habe ich die function in einer js datei gekapselt und möchte sie aus verschiedenen xsls heraus aufrufen. Beim aufrufen soll diese function parameter durch xsl-tags erhalten (also <xsl:value-of select="//eins/@ab"/>). Genau an diesem Punkt habe ich das Problem.
Naja, mit xsl:text gehts ja, ich mache das am besten wieder so..
Danke vielmals
Rondra
Hallo,
habe ich gemeint, dass ích eine xsl habe, die auf eine .js datei referenziert. Diese js-datei beinhaltet diese function, die aus der xsl heraus aufgerufen wird. es ist natürlich möcglich wie Du schriebst diese function in die xsl reinzuschreiben, aber damit erzeuge ich redundanzen, da ich die function auch in anderen xsls einsetzen muss.
deshalb habe ich die function in einer js datei gekapselt und möchte sie aus verschiedenen xsls heraus aufrufen. Beim aufrufen soll diese function parameter durch xsl-tags erhalten (also <xsl:value-of select="//eins/@ab"/>). Genau an diesem Punkt habe ich das Problem.
Warum machst du nicht eine eigene XSL-Datei mit eigenen Templates für solche Sachen, die kannst du dann per xsl:import in andere XSLs laden und per xs:with-param dann die Templates an entsprechenden Stellen laden und neue Werte einfügen.
Abe so genau verstehe ich das Problem noch immer nicht, bzw. ich kann den Fehler einfach nicht nachvollziehen.
Grüße
Thomas
hi Thomas,
Warum machst du nicht eine eigene XSL-Datei mit eigenen Templates für solche Sachen
hm, das ist eine gute Idee, daran hatte ich noch gar nicht gedacht!
Hier nochmal das Problem:
ich habe einen satz von xsl und eine js datei. in dieser js datei haabe ich alle functionen die die xsl benötigen zusammengefasst.
Mein Problem ist ja , dass ich auch xsl:value-of ausdrücke in diesen functions nutzen muss. beisp einer solchen function in der js:
function deleteConfirm(x)
{
Check = confirm(x);
if(Check == true)
window.location.href = "seite.html?modus=<xsl:value-of select="//dok/@modus"/>;
}
Das Beisp. klappt natürlich nicht , solange sie in der js. datei drinsteht. Vorher -bevor ich aufgeräumt habe- stand diese function IN jeder XSL. So gings damals in der XSL:
<script>
<xsl:text disable-output-escaping="yes">
function deleteConfirm(x)
{
Check = confirm(x);
if(Check == true)
window.location.href = "seite.html?modus=</xsl:text>
<xsl:value-of select="//dok/@modus"/><xsl:text disable-output-escaping="yes">;
}
</script>
Aber wie gesagt, ich wollte diese function "zentralisieren" und habe sie in eine js gepackt und nun funzt das natürlich nicht. Wegen dem
<xsl:text disable-output-escaping="yes"> am anfang in der js, da gibts exceptions.
Hatte die Hoffnung dass es vielleihct eine einfache möglichkeit gibt aber Du hast es schon gesagt: ich könnte statt einer js eine weitere XSL anlegen und solche Problem-functionen darin sammeln.
Vielen dank Thomas,
das setzte ich mal um. bin gespannt!
viele grüsse
Rondra
Hallo,
habe ich gemeint, dass ích eine xsl habe, die auf eine .js datei referenziert. Diese js-datei beinhaltet diese function, die aus der xsl heraus aufgerufen wird. es ist natürlich möcglich wie Du schriebst diese function in die xsl reinzuschreiben, aber damit erzeuge ich redundanzen, da ich die function auch in anderen xsls einsetzen muss.
deshalb habe ich die function in einer js datei gekapselt und möchte sie aus verschiedenen xsls heraus aufrufen. Beim aufrufen soll diese function parameter durch xsl-tags erhalten (also <xsl:value-of select="//eins/@ab"/>). Genau an diesem Punkt habe ich das Problem.
Warum machst du nicht eine eigene XSL-Datei mit eigenen Templates für solche Sachen, die kannst du dann per xsl:import in andere XSLs laden und per xs:with-param dann die Templates an entsprechenden Stellen laden und neue Werte einfügen.
Abe so genau verstehe ich das Problem noch immer nicht, bzw. ich kann den Fehler einfach nicht nachvollziehen.
Grüße
Thomas
Hallo,
hm, das ist eine gute Idee, daran hatte ich noch gar nicht gedacht!
Hier nochmal das Problem:
ich habe einen satz von xsl und eine js datei. in dieser js datei haabe ich alle functionen die die xsl benötigen zusammengefasst.
Mein Problem ist ja , dass ich auch xsl:value-of ausdrücke in diesen functions nutzen muss. beisp einer solchen function in der js:function deleteConfirm(x)
{
Check = confirm(x);
if(Check == true)
window.location.href = "seite.html?modus=<xsl:value-of select="//dok/@modus"/>;
}
So in etwa könntest du das machen:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:import href="javascript.xsl" />
...
<xsl:call-template name="deleteConfirm">
<xsl:with-param name="modus" select="//dok/@modus" />
</xsl:call-template>
...
</xsl:stylesheet>
Und im javascript.xsl dann:
<xsl:template name="deleteConfirm">
<xsl:param name="modus" />
<script language="JavaScript" type="text/javascript">
function deleteConfirm(x)
{
Check = confirm(x);
if(Check == true)
window.location.href = "seite.html?modus=<xsl:value-of select="$modus"/>;
}
</script>
</xsl:template>
Grüße
Thomas
Jau,
Danke Thomas! Das ist eine super Idee! :-D
viele Grüsse
Rondra