我试图编写一个样式表,给定一个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>
Run Code Online (Sandbox Code Playgroud)
我正在调用xsltproc来执行此样式表,如下所示:
xsltproc --param target cora_cmd gen-commands.xsl commands.xml
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是目标的参数值似乎没有设置.至少来自消息的名称似乎是一个空字符串,并且测试xsl:if总是失败.我确信这是由于我的一些骨头错误,但我还没有意识到这一点.有谁知道我做错了什么?
Tim*_*m C 24
如果我已正确理解了这个问题,我认为您需要使用'stringparam'作为调用xsltproc的选项,假设您传递的是字符串值以匹配,而不是XPath表达式.
xsltproc --stringparam target cora_cmd gen-commands.xsl commands.xml
Run Code Online (Sandbox Code Playgroud)
在样式表中的'target'参数声明中,@select如果要在命令行上未使用该参数时将其作为默认值,则应引用该值:
<xsl:param name="target" select="'cora_cmd'"/>
Run Code Online (Sandbox Code Playgroud)