MankoFranko: Script einbauen

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

  1. 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

    1. <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

      1. Hallo,

        siehe meine Antwort an Thomas.

        Grüße
        Thomas

    2. 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">&lt;input type="checkbox" onchange="this.form.submit()" name="</xsl:text><xsl:value-of select="@id"/><xsl:text disable-output-escaping="yes">" &lt;?php getState('box1')?&gt; /&gt;</xsl:text>

      Vielleicht hast Du noch eine bessere Idee.

      MfG, Thomas

      1. 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">&lt;input type="checkbox" onchange="this.form.submit()" name="</xsl:text><xsl:value-of select="@id"/><xsl:text disable-output-escaping="yes">" &lt;?php getState('box1')?&gt; /&gt;</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

        1. 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

        2. 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

          1. 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