XML DOM XSLT 8章 Transformer
- 8.1. Transformer
- 8.2. 基本的な変換
- 8.3. 出力方式の設定
- 8.4. パラメータの設定
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>

