如何将指定XML节点传入<xsl:call-template>模板?已尝试xsl:param未果
实现XML中target节点传入update.target模板的正确方法
要把target节点传入指定模板,核心是用<xsl:param>定义接收参数,再用<xsl:with-param>传递节点,具体修改如下:
关键修改点
- 在
update.target模板中添加<xsl:param>,声明用于接收target节点的参数(比如命名为$target-node) - 在
<xsl:call-template>内部用<xsl:with-param>,通过select属性指定要传递的target节点路径
修改后的完整XSLT代码
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <body> <xsl:apply-templates/> </body> </html> </xsl:template> <xsl:template match="catalog"> <xsl:if test="cd/target"> <xsl:call-template name="update.target"> <!-- 传递第一个找到的target节点,若要处理所有可改用循环 --> <xsl:with-param name="target-node" select="cd/target"/> </xsl:call-template> </xsl:if> </xsl:template> <xsl:template name="update.target"> <!-- 声明接收节点的参数 --> <xsl:param name="target-node"/> <!-- 示例:输出target节点内的内容 --> <div> <p>First Name: <xsl:value-of select="$target-node/first"/></p> <p>Last Name: <xsl:value-of select="$target-node/second"/></p> </div> </xsl:template> </xsl:stylesheet>
说明
select="cd/target"会选中catalog下第一个cd里的target节点,如果需要处理所有含target的cd节点,可以改用<xsl:for-each select="cd[target]">包裹call-template,逐个传递- 在
update.target模板中,通过$target-node就能访问传入的节点,比如$target-node/first获取first子节点的文本值
内容的提问来源于stack exchange,提问作者Alexandr Ryazanov
相关产品推荐
相关产品推荐

