我正在使用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的当前选定值,而不是刚更改的那个?
答案 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>