パラメータを使った値の受渡し

はじめに

xsltを使ってxmlを変換する際に外部から値を受け渡したい場合がある.パラメータを使った値の受渡しをSaxon 8.5を使って試してみた.

xmlとxslt

サンプルとして以下のxmlとxsltを用意した.foo.xslの中にある<xsl:param name="foo"/>が値の受渡しに使用する変数である.

<!-- foo.xml -->
<?xml version="1.0" encoding="UTF-8"?>
<root>
  <foo/>
</root>

<!-- foo.xsl -->
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:param name="foo"/> <!-- 値の受渡しを行うパラメータ -->

  <xsl:template match="/root">
    foo: <xsl:value-of select="$foo"/>
  </xsl:template>
</xsl:stylesheet>

Saxonを使ってパラメータfooに値を設定してみよう.なお,${saxon_home}はSaxonをインストールしたディレクトリである.

$ java -cp "${saxon_home}/saxon8.jar;." net.sf.saxon.Transform -novw foo.xml foo.xsl foo=100
    <?xml version="1.0" encoding="UTF-8"?>
    foo: 100

うまくいった.

<xsl:param name="foo"/><xsl:stylesheet>直下になければならない.例えば,<xsl:template>内にあってもパラメータには使えない.下記のxsltを使って試してみよう.

<!-- foo.xsl -->
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:template match="/root">
    <xsl:param name="foo"/> <!-- xsl:stylesheetにないので,変数fooには値は受け渡せない -->
    foo: <xsl:value-of select="$foo"/>
  </xsl:template>
</xsl:stylesheet>

$ java -cp "${saxon_home}/saxon8.jar;." net.sf.saxon.Transform -novw foo.xml foo.xsl foo=100
    <?xml version="1.0" encoding="UTF-8"?>
    foo: 

値の表示はない.