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>