繁体   English   中英

xsl:param默认值未被覆盖

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM