1

Saxon-CEとXslt2.0を使用してWebページ(コンボボックス)でコントロールを作成しています。複数のコントロールの値を、そのコントロールの値を使用してドキュメントを処理するテンプレートに渡すのに問題があります。これが私が持っているものです:

<xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:ixsl="http://saxonica.com/ns/interactiveXSLT"
extension-element-prefixes="ixsl">

<xsl:template match="/">

<xsl:result-document href="#comboBox1">
  <select id="myBox1">
    <option value="1">One</option>
    <option value="2">two</option>
  </select>
</xsl:result-document>

<xsl:result-document href="#comboBox2">
  <select id="myBox2">
    <option value="A">Letter-A</option>
    <option value="B">Letter-B</option>
  </select>
</xsl:result-document>

</xsl:template>

<xsl:template match="select[@id='myBox1'] mode=ixsl:onchange">
 <xsl:variable name="control1" select="."/>
 <xsl:variable name="numVal" select="ixsl:get($control1,'value')"/>

 <xsl:call-template name="displayStuff">
   <xsl:with-param name="field1" select="$numVal"/>
 </xsl:call-template>
</xsl:template>

<xsl:template match="select[@id='myBox2'] mode=ixsl:onchange">
 <xsl:variable name="control2" select="."/>
 <xsl:variable name="letVal" select="ixsl:get($control2,'value')"/>

 <xsl:call-template name="displayStuff">
   <xsl:with-param name="field2" select="$letVal"/>
 </xsl:call-template>

</xsl:template>

<xsl:template name="displayStuff">
 <xsl:param name="field1" select="0"/>
 <xsl:param name="field2" select="Z">
  <xsl:result-document href="#display" method="ixsl:replace-content">
    <xsl:text>Number: </xsl:text> <xsl:value-of select="$field1"/><br/>
    <xsl:text>Letter: </xsl:text> <xsl:value-of select="$field2"/><br/>        
  </xsl:result-document>
</xsl:template>

</xsl:stylesheet>

問題は、各コントロールが、変更されたばかりのアイテムの表示テンプレートに正しい値を返すが、他のアイテムは返さないことです。

たとえば、最初のドロップボックスで1を選択すると、数字:1文字:Zが表示されます。

しかし、2番目のドロップボックスの値を変更すると(たとえばAに)、Number:0 Letter:Aが得られます。

表示テンプレートに渡されるものが、変更されたばかりのドロップボックスではなく、すべてのドロップボックスの現在選択されている値であることを確認するにはどうすればよいですか?

4

1 に答える 1

1

コントロールの現在の値をパラメーターとして displayStuff テンプレートに渡す代わりに、そのテンプレートで XPath 式を使用して HTML ページからコントロールに直接アクセスしないのはなぜでしょうか?

これらすべてを単一のテンプレートに組み合わせることができると思います。

<xsl:template match="select[@id=('myBox1', 'myBox2')] mode=ixsl:onchange">
 <xsl:variable name="control1" select="."/>
 <xsl:variable name="numVal" select="ixsl:get(id('myBox1'),'value')"/>
 <xsl:variable name="letVal" select="ixsl:get(id('myBox2'),'value')"/>
  <xsl:result-document href="#display" method="ixsl:replace-content">
    <xsl:text>Number: </xsl:text> <xsl:value-of select="$numVal"/><br/>
    <xsl:text>Letter: </xsl:text> <xsl:value-of select="$letVal"/><br/>        
  </xsl:result-document>
</xsl:template>
于 2013-01-21T12:20:30.233 に答える