目次へ

8.4 パラメータの設定

XSLTではパラメータを設定することができます。パラメータの値は、TransformerのsetParameterメソッドを使用して、プログラム実行時に設定することも可能です。

例えば、以下のXMLをスタイルシートに従って変換します。

people.xml
<?xml version="1.0"?>
<people>
<person>山田 太郎</person>
<person>鼻 花子</person>
</people
to_html.xsl
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="font_size" select="3"/>
<xsl:template match="/">
  <html>
  <head><title>html method</title></head>
    <xsl:apply-templates select="people/person"/>
  </html>
</xsl:template>

<xsl:template match="people/person">
    <p><font>
    <xsl:attribute name="size"><xsl:value-of select="$font_size"/></xsl:attribute>
    <xsl:value-of select="."/></font></p>
</xsl:template>
</xsl:stylesheet>

フォントのサイズを、パラメータで指定しています。引数によりフォントサイズを変更する、プログラムは以下のようになります。

 1  import javax.xml.transform.TransformerFactory;
 2  import javax.xml.transform.Transformer;
 3  import javax.xml.transform.Source;
 4  import javax.xml.transform.Result;
 5  import javax.xml.transform.OutputKeys;
 6  import javax.xml.transform.stream.StreamSource;
 7  import javax.xml.transform.stream.StreamResult;
 8
 9
10  public class TransformerSample3{
11
12      public static void main(String args[]) throws Exception{
13
14          Source xsltSource=new StreamSource("to_html.xsl");
15
16          TransformerFactory transFactory = TransformerFactory.newInstance();
17          Transformer transformer = transFactory.newTransformer(xsltSource);
18
19          if(args.length>0){
20              transformer.setParameter("font_size",args[0]);
21          }
22
23          Source source = new StreamSource("people.xml");
24          Result result = new StreamResult(System.out); 
25          transformer.transform(source, result);
26
27      }
28
29  }

20行目で、font_size パラメータの値を、引数に指定されたものに設定しています。このプログラムを実行してみましょう。例えば、引数なしで実行した場合、出力結果は以下のようになります。

$  java TransformerSample3 
<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=EUC-JP">
<title>html method</title>
</head>
<p>
<font size="3">山田 太郎</font>
</p>
<p>
<font size="3">鼻 花子</font>
</p>
</html>

引数を指定して実行すると、フォントのサイズが変更されます。

$  java TransformerSample3 7
<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=EUC-JP">
<title>html method</title>
</head>
<p>
<font size="7">山田 太郎</font>
</p>
<p>
<font size="7">鼻 花子</font>
</p>
</html>

(実習課題2)

以下のXMLを、スタイルシートに従い変換するプログラムを作成しなさい。

  • 出力結果は見やすくインデントする。
  • 文字コードEUC-JP、またはShift-JISで出力する。
  • パラメータnの値を、引数で指定できるようにする。
people.xml
<?xml version="1.0" encoding="EUC-JP"?>
<people>
  <person>会田 太郎</person>
  <person>植田 次郎</person>
  <person>岡田 三朗</person>
  <person>菊田 四郎</person>
  <person>家古田 五郎</person>
</people>
to_html.xsl
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="n" select="2"/>
<xsl:template match="/">
  <html>
  <head><title>html method</title></head>
    <xsl:apply-templates select="people"/>
  </html>
</xsl:template>

<xsl:template match="people">
  <p><xsl:value-of select="person[position()=$n]"/></p>
</xsl:template>

</xsl:stylesheet>

解答例はこちら

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp