パラメータを使った値の受渡し
はじめに
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:
値の表示はない.