我的xsl有一个参数
<xsl:param name="halfPath" select="'halfPath'"/>
Run Code Online (Sandbox Code Playgroud)
我想在比赛中使用它
<xsl:template match="Element[@at1='value1' and not(@at2='{$halfPath}/another/half/of/the/path')]"/>
Run Code Online (Sandbox Code Playgroud)
但这不起作用.我想一个不能在''里面使用参数.如何修复/解决这个问题?
好吧,你可以在模板中使用条件指令:
<xsl:template match="Element[@at1='value1']">
<xsl:if test="not(@at2=concat($halfPath,'/another/half/of/the/path'))">
.. do something
</xsl:if>
</xsl:template>
Run Code Online (Sandbox Code Playgroud)
您只需要知道此模板将处理满足第一个条件的所有元素.如果你有一个不同的模板来处理与第一个匹配但不匹配第二个的元素,那么使用a <xsl:choose>,并将另一个模板的主体放在<xsl:otherwise>块中.
或者,如果您可以切换到XSLT2处理器,XSLT2可以处理它.
在XSLT 1.0 W3C规范禁止引用的匹配图案内的变量/参数.:
"match属性的值包含VariableReference是一个错误"
XSLT 2.0中没有这样的限制,因此请使用XSLT 2.0.
如果由于不可能的原因使用XSLT2.0是不可能的,那么将<xsl:template>指令的完整主体放在一个<xsl:if>测试与匹配模式一起的位置相当于包含变量/参数引用的XSLT 2.0匹配模式.
在一个更复杂的情况下,您有多个模板匹配相同类型的节点但具有不同的谓词引用变量/参数,那么<xsl:choose>需要使用包装而不是包装<xsl:if>.
| 归档时间: |
|
| 查看次数: |
9134 次 |
| 最近记录: |