2008-10-30 43 views
15

Estoy intentando componer una hoja de estilo que, dada una entrada XML (obviamente) y un parámetro que especifica un "objetivo", producirá una lista de comandos que coinciden con ese objetivo. Esta es la hoja de estilos como está escrito:xsltproc parámetros de línea de comando utilizando stringparam

<?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> 

invoco xsltproc para ejecutar esta hoja de estilo de la siguiente manera:

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

El problema que estoy encontrando es que no parece que el valor del parámetro de destino para establecerse. Al menos el nombre que proviene del mensaje parece ser una cadena vacía y la prueba de xsl: if siempre falla. Estoy seguro de que esto se debe a un error desquiciado de mi parte, pero todavía no lo he reconocido. ¿Alguien sabe lo que he hecho mal?

+0

¿Puede proporcionarnos un ejemplo de XML? –

Respuesta

24

Si he entendido la pregunta correctamente, creo que debe usar 'stringparam' como la opción para llamar a xsltproc, suponiendo que está pasando un valor de cadena para que coincida, y no una expresión XPath.

xsltproc --stringparam target cora_cmd gen-commands.xsl commands.xml 
7

En su declaración del parámetro 'objetivo' en la hoja de estilo, se debe citar el valor @select si quieres que funcione como un valor por defecto cuando el parámetro no se utiliza en la línea de comandos:

<xsl:param name="target" select="'cora_cmd'"/> 
Cuestiones relacionadas