我的<xsl:param>有什么问题?</xsl:param>

时间:2011-04-19 20:07:01

标签: xslt parameters params

我正在尝试使用xsl:param来对属性进行模板匹配。通过我在这里和互联网上发现的一切,我正确地做到了这一点。但是,我的输出是空白的。

这是我的xslt

<xsl:param name="strm_name">main</xsl:param>    
<xsl:template match="stream[@name='{$strm_name}']"></xsl:template>

如果我将参数调用硬编码为“main”,这就可以了 这是我想要匹配的XML标签..

<doc><stream name="main"></stream></doc>

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

我看到两个问题:

  1. 您不能在XSLT 1.0
  2. 中的匹配模式中使用变量或参数引用
  3. 在谓词中引用参数时,不需要周围的'{...}'。 (您可能会将此与属性值模板混淆。)请改用:stream[@name=$strm_name]
  4. 问题#1的可能解决方法是仅选择那些符合您的参数控制的条件的元素。 (你可以引用select表达式中的param)。

    例如,这个样式表:

    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
        <xsl:output method="text" />
        <xsl:param name="strm_name" select="'main'"/>
        <xsl:template match="/">
            <xsl:apply-templates select="/*/stream[@name=$strm_name]" />
        </xsl:template>
        <xsl:template match="stream">
            <xsl:apply-templates />
            <xsl:text>/</xsl:text>
        </xsl:template>
    </xsl:stylesheet>
    

    适用于本文件:

    <root>
        <stream name="main">1</stream>
        <stream name="other">2</stream>
        <stream name="main">3</stream>
        <stream name="main">4</stream>
        <stream name="other">5</stream>
        <stream name="other">6</stream>
    </root>
    

    ...仅匹配所需的节点。输出:

    1/3/4/