2013-03-19 2 views

ответ

1

Нет, параметры не могут быть динамически доступны по именам, но если вы используете процессор XSLT, который поддерживает the node-set() function, вы можете создать карту, как это рода доступа к ним по имени:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl" 
> 
    <xsl:param name="myParam1" /> 
    <xsl:param name="myParam2" /> 

    <xsl:variable name="paramsFragment"> 
    <item name="myParam1"> 
     <xsl:copy-of select="$myParam1"/> 
    </item> 
    <item name="myParam2"> 
     <xsl:copy-of select="$myParam2"/> 
    </item> 
    </xsl:variable> 
    <xsl:variable name="params" select="msxsl:node-set($paramsFragment)/*" /> 

    <xsl:output method="xml" indent="yes"/> 

    <xsl:template match="/"> 
    <xsl:value-of select="$params[@name = 'myParam2']"/> 

    <xsl:variable name="paramName" select="'myParam1'" /> 
    <xsl:value-of select="$params[@name = $paramName]"/> 
    </xsl:template> 
</xsl:stylesheet> 
+0

Есть ли способ увидеть, какие параметры были переданы в преобразование, находясь внутри файла xslt? – user2184503

+0

Вы должны быть в состоянии проверить, указан ли параметр или нет с помощью 'boolean ($ myParam1)' (если вы не передадите ему логическое значение) или используя вышеприведенный подход, вы должны быть в состоянии проверить для 'boolean ($ params [@name = 'paramName']/node()) ' – JLRishe

0

Значение параметров, значения которых производятся динамически, может быть доступно только через ссылку на параметр (с использованием синтаксиса '$'paramName).

Из комментария, сделанного ОР:

Есть ли способ, чтобы увидеть, какие параметры были переданы в преобразования в то время как внутри файла XSLT?

Да, есть такой способ, который может быть успешным в значительной степени:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 
<xsl:param name="pmyParam1" select="-999999999999999"/> 

<xsl:template match="/"> 
    <xsl:if test="not($pmyParam1 = '-999999999999999')"> 
    $pmyParam1 has a non-default value -- was definitely set from outside ! 
    </xsl:if> 
</xsl:template> 
</xsl:stylesheet> 

Преобразование выше сравнивает значение параметра со значением по умолчанию, заданный. Если два значения отличаются друг от друга, это означает, что было передано внешнее значение. Если нет, нельзя сделать твердое заключение.

Однако, если значение по умолчанию выбрано так, чтобы быть уникальным и очень маловероятным для инициатора преобразования, чтобы знать, то тот факт, что фактические и значения по умолчанию одинаковы, сильно подразумевает, что внешний вызывающий не указал значение для этого параметра.

Смежные вопросы