1

それらはどのように変換に保存されますか?

「$variable」を使用する以外に、それらにアクセスするにはどうすればよいですか。名前からアクセスできますか?

<xsl:value-of select = '*/*/xsl:param[@name=myvariable']/@select"/>
4

2 に答える 2

2

いいえ、名前でパラメータに動的にアクセスすることはできませんが、 node-set() 関数をサポートする XSLT プロセッサを使用している場合は、次のようなマップを設定して名前アクセスすることができます。

<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>
于 2013-03-19T02:34:47.173 に答える
1

値が動的に生成されるパラメーターの値は、パラメーター参照 ('$'paramName構文を使用) を介してのみアクセスできます。

OPによるコメントから:

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>

上記の変換は、パラメーター値を指定されたデフォルト値と比較します。2 つの値が異なる場合は、外部の値が渡されたことを意味します。そうでなければ、確固たる結論を導き出すことはできません

ただし、デフォルト値が非常にユニークで、変換の開始者が知る可能性が非常に低いものになるように慎重に選択されている場合、実際の値とデフォルト値が同じであるという事実は、外部の呼び出し元がそうしていないことを強く意味します。このパラメーターの値を指定しました。

于 2013-03-19T03:42:43.390 に答える