[英]xsl:param default value is not being overridden
我尝试将问题减少到尽可能小的测试用例。
我目前有以下样式表:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template name="set-attrib">
<xsl:param name="val" select="3"/>
<xsl:attribute name="value">
<xsl:value-of select="$val" />
</xsl:attribute>
</xsl:template>
<xsl:template match='@value[parent::element]'>
<xsl:call-template name="set-attrib">
<with-param name="val">2</with-param>
</xsl:call-template>
</xsl:template>
</xsl:stylesheet>
并将其应用于以下XML:
<?xml version="1.0"?>
<element value="0"/>
我得到的输出:
<?xml version="1.0"?>
<element value="3"/>
而不是我所期望的:
<?xml version="1.0"?>
<element value="2"/>
似乎模板set-attrib
忽略了在call-template
设置的参数val
。
我在网上挖了一些想法,并尝试了各种排列方式(例如,在with-param
使用select="2"
,或者将xsl:param
的默认值移到<!-- Content: template -->
,而不是而不是select
属性)。
我似乎能够使其正常工作的唯一方法是在set-attrib
模板中对参数进行硬编码或完全内联call-template
。
我看不到这与其他示例代码有何不同; 我是否缺少明显的东西?
<with-param name="val">2</with-param>
必须为<xsl:with-param name="val">2</with-param>
。 进行此更改后, http://xsltransform.net/bFDb2BS可以正常工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.