Saxon-ce具有多个用户输入控件

时间:2013-01-18 21:19:47

标签: xslt-2.0 saxon

我正在使用Saxon-CE和Xslt 2.0对网页(组合框)进行控制。我无法将多个控件的值传递给使用该控件的值来处理文档的模板。这就是我所拥有的:

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

问题是每个控件都会将正确的值返回到刚刚更改的项目的显示模板,而不是其他项目。

例如,如果我在第一个dropbox中选择1,我会得到Number:1 Letter:Z

但现在如果我改变了第二个保管箱的价值(对于让我们说A),我得到数字:0信:A。

如何确保传递给显示模板的内容是所有Dropbox的当前选定值,而不是刚更改的那个?

1 个答案:

答案 0 :(得分:1)

为什么不通过XPath表达式直接从HTML页面访问控件,而不是将控件的当前值作为参数传递给displayStuff模板?

我怀疑你可以将所有这些组合成一个模板:

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