Script einbauen
MankoFranko
- xsl
Hallo miteinander,
ich möchte eine XML-Datei per XSLT in HTML umwandeln. So weit so unspektakulär. Dabei habe ich allerdings ein Checkbox-Element, dem ich beim Aufruf der HTML Datei einen serverseitig abgespeicherten Zustand zuweisen möchte. Dies will ich per PHP realisieren.
Ich möchte also von
XML: <checkbox>
nach
HTML: <input type="checkbox" name="box1" <?php getState('box1')?> />
Mein Problem ist jetzt, wie bekomme ich die Scriptanweisung (<?php getState('box1')?>) in der HTML Datei in das input-Tag?
Im Moment sieht der entsprechende XSLT-Auszug so aus:
<xsl:template match="checkbox">
<input type="checkbox" onchange="this.form.submit()">
<xsl:attribute name="name">
<xsl:value-of select="@id"/>
</xsl:attribute>
</input>
xsl:template
Danke für eure Hilfe,
Mfg, MF
Hallo,
Mein Problem ist jetzt, wie bekomme ich die Scriptanweisung (<?php getState('box1')?>) in der HTML Datei in das input-Tag?
Im Moment sieht der entsprechende XSLT-Auszug so aus:
<xsl:template match="checkbox">
<input type="checkbox" onchange="this.form.submit()">
<xsl:attribute name="name">
<xsl:value-of select="@id"/>
</xsl:attribute>
<xsl:text disable-output-escaping="yes"><?php getState('box1')?></xsl:text>
</input>
xsl:template
Grüße
Thomas
<xsl:template match="checkbox">
<input type="checkbox" onchange="this.form.submit()">
<xsl:attribute name="name">
<xsl:value-of select="@id"/>
</xsl:attribute>
<xsl:text disable-output-escaping="yes"><?php getState('box1')?></xsl:text>
</input>
xsl:template
Leider nicht, das würde im Endprodukt wie folgt aussehen:
<input type="checkbox" onchange="this.form.submit()"><?php getState('box1')?></input>
Dadurch würde der Rückgabestring der aufgerufenen Funktion als Checkbox-Titel danebenstehen. Der Script-Aufruf muss direkt im input-Tag stehen...
Mfg, MF
Hallo,
siehe meine Antwort an Thomas.
Grüße
Thomas
Hallo Thomas,
<xsl:text disable-output-escaping="yes"><?php getState('box1')?></xsl:text>
Dann bekommt der OP aber ein "PHP-Kindelement" von input, also etwa <input ...><?php ... ?></input>
Das passiert auch damit:
<xsl:processing-instruction name="php">
xsl:textgetState('box1')</xsl:text>
</xsl:processing-instruction>
Es sollte aber so aussehen:
<input ... <?php ... ?> />
AFAIK ist das mit XSLT-Mitteln nur so hinzubekommen:
<xsl:text disable-output-escaping="yes"><input type="checkbox" onchange="this.form.submit()" name="</xsl:text><xsl:value-of select="@id"/><xsl:text disable-output-escaping="yes">" <?php getState('box1')?> /></xsl:text>
Vielleicht hast Du noch eine bessere Idee.
MfG, Thomas
Hallo Thomas,
Dann bekommt der OP aber ein "PHP-Kindelement" von input, also etwa <input ...><?php ... ?></input>
Ehm, ja.
AFAIK ist das mit XSLT-Mitteln nur so hinzubekommen:
<xsl:text disable-output-escaping="yes"><input type="checkbox" onchange="this.form.submit()" name="</xsl:text><xsl:value-of select="@id"/><xsl:text disable-output-escaping="yes">" <?php getState('box1')?> /></xsl:text>
Damit bekommt er leider auch nur ein (zumindest Saxon produziert dies):
<input type="checkbox" onchange="this.form.submit()" name="" ><?php getState('box1')?> />
Das einzige wo ich das <?php ...?> jetzt auf die Schnelle "reinbekommen" habe ist:
<xsl:variable name="createCheckbox">
<![CDATA[
<input type="checkbox" onchange="this.form.submit()"
]]>
name="<xsl:value-of select="@id" />"
<![CDATA[
<?php getState('box1')?> />
]]>
</xsl:variable>
<xsl:value-of select="$createCheckbox" />
Allerdings erzeugt dies logischer Weise einen Text und ein <xsl:value-of select="$createCheckbox" disable-output-escaping="yes" /> hat denselben Effekt wie dein Bsp. also ein <input type="checkbox" onchange="this.form.submit()" name=""><?php getState('box1')?> />
Woher und warum der Prozessor hier den unnötigen ">" einfügt weiss ich jetzt auch nicht.
Ich sehe jetzt an sich nur eine Möglichkeit: er speichert den Wert von name="" in der Ausgabe in einer PHP-Variable und erstellt dann das <input> komplett mit PHP dabei holt er den Wert für name="" aus der Variable.
Grüße
Thomas
Hallo,
Damit bekommt er leider auch nur ein (zumindest Saxon produziert dies):
<input type="checkbox" onchange="this.form.submit()" name="" ><?php getState('box1')?> />
Ich erhalte mit XMLStarlet [http://xmlstar.sourceforge.net/] dieses Ergebnis:
<input type="checkbox" onchange="this.form.submit()" name="" <?php getState('box1')?> />
MfG, Thomas
Hallo Thomas,
Damit bekommt er leider auch nur ein (zumindest Saxon produziert dies):
<input type="checkbox" onchange="this.form.submit()" name="" ><?php getState('box1')?> />
Mit Saxon 6.5.2 (7.x/8.x habe ich gerade nicht am Start) erhalte ich analog zu XMLStarlet:
<input type="checkbox" onchange="this.form.submit()" name="" <?php getState('box1')?> />
MfG, Thomas
Hallo Thomas,
Damit bekommt er leider auch nur ein (zumindest Saxon produziert dies):
<input type="checkbox" onchange="this.form.submit()" name="" ><?php getState('box1')?> />Mit Saxon 6.5.2 (7.x/8.x habe ich gerade nicht am Start) erhalte ich analog zu XMLStarlet:
Dann dürfte es OK, sein.
Meine Ergebnisse stammen vom SAXON 6.5.
(dies dürfe als ein Bug im 6.5 sein)
Grüße
Thomas