代码之家  ›  专栏  ›  技术社区  ›  Jon Trauntvein

使用stringparam的xsltproc命令行参数

  •  16
  • Jon Trauntvein  · 技术社区  · 17 年前

    我正试图编写一个样式表,给定一个XML输入(显然)和一个指定“目标”的参数,它将生成一个与该目标匹配的命令列表。这是书写的样式表:

    <?xml version="1.0"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
      <xsl:param name="target" select="cora_cmd"/>
      <xsl:output method="xml" indent="yes"/>
      <xsl:template match="command/program">
        <xsl:if test="@name=$target">
          <xsl:message terminate="no">found match <xsl:value-of select="$target"/>   </xsl:message>
          <xi:include xmlns:xi="http://www.w3.org/2003/XInclude">
            <xsl:attribute name="href"><xsl:value-of select="../@help"/></xsl:attribute>
          </xi:include>
        </xsl:if>
      </xsl:template>
    </xsl:stylesheet>
    

    我正在调用xsltproc执行此样式表,如下所示:

    xsltproc --param target cora_cmd gen-commands.xsl commands.xml
    

    我遇到的问题是,目标的参数值似乎没有设置。至少来自消息的名称看起来是空字符串,并且xsl:if的测试总是失败的。我敢肯定这是因为我犯了一些骨性错误,但我还没有意识到。有人知道我做错了什么吗?

    2 回复  |  直到 13 年前
        1
  •  24
  •   Tim C    17 年前

    如果我正确理解了这个问题,我认为您需要使用“stringparam”作为调用xsltproc的选项,假设您传递的是要匹配的字符串值,而不是xpath表达式。

    xsltproc --stringparam target cora_cmd gen-commands.xsl commands.xml
    
        2
  •  8
  •   ChuckB    16 年前

    在样式表中对“target”参数的声明中,应该引用 @select 如果希望它在命令行上不使用参数时作为默认值使用,则返回值:

    <xsl:param name="target" select="'cora_cmd'"/>
    
    推荐文章