0

XML:

<CONTROLS>
        <BUTTON>
               <input name="myButton" onclick="existingFunction();"/>
        </BUTTON>
        <LABEL>
               Text ME
        </LABEL>

</CONTROLS>

XSLT:

    <xsl:template match="/">
       <xsl:apply-templates select="CONTROLS/BUTTON/input"/>
    </xsl:template>  

    <xsl:template match="input">
        <xsl:variable name="existingOnclickFunction" select="/@onclick"/>
        <xsl:copy>
          <xsl:attribute name="onclick">
             <xsl:value-ofselect="$existingOnclickFunction"/>newFunction();
           </xsl:attribute>
          <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
       </xsl:template>

   <!--Identity template copies content forward -->
      <xsl:template match="@*|node()">
        <xsl:copy>
          <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
      </xsl:template>

期待される出力:

<input name="myButton" onclick="existingFunction();newFunction(); "/>

質問:

 I'm getting the "input" node using xpath/template and adding another function on the 

「onclick」属性。出来ますか?はいの場合、ここで何か不足していますか? コードが機能しません。別のアプローチはありますか?

 Thanks in advance :)
4

1 に答える 1

1

この変換:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:template match="input">
   <input onclick="{@onclick}newFunction();">
      <xsl:copy-of select="@*[not(name()='onclick')]"/>
   </input>
 </xsl:template>
 <xsl:template match="text()"/>
</xsl:stylesheet>

提供された XML ドキュメントに適用した場合:

<CONTROLS>
    <BUTTON>
        <input name="myButton" onclick="existingFunction();"/>
    </BUTTON>
    <LABEL>Text ME</LABEL>
</CONTROLS>

必要な正しい結果が生成されます

<input onclick="existingFunction();newFunction();" name="myButton"/>

説明:

テンプレートとAVT (属性値テンプレート)の適切な使用。

于 2012-12-12T04:13:07.967 に答える