Параметры командной строки xsltproc с использованием stringparam
Я пытаюсь составить таблицу стилей, которая, учитывая вход 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: если всегда терпит неудачу. Я уверен, что это связано с какой-то костяной ошибкой с моей стороны, но я еще не узнал об этом. Кто-нибудь знает, что я сделал неправильно?
Ответы
Ответ 1
Если я правильно понял вопрос, я думаю, вам нужно использовать 'stringparam' в качестве опции для вызова xsltproc, предполагая, что вы передаете строковое значение для соответствия, а не выражение XPath.
xsltproc --stringparam target cora_cmd gen-commands.xsl commands.xml
Ответ 2
В объявлении параметра "target" в таблице стилей вам следует указать значение @select
, если вы хотите, чтобы оно функционировало как значение по умолчанию, когда параметр не используется в командной строке:
<xsl:param name="target" select="'cora_cmd'"/>