<x:transform>
xmlns:x="http://java.sun.com/jsp/jstl/xml"
SYNOPSIS
<x:transform
>
</x:transform>
| doc="XMLドキュメント" |
| xml="XMLドキュメント" |
| xslt*="XSL" |
| docSystemId="SYSTEM ID" |
| xmlSystemId="SYSTEM ID" |
| xsltSystemId="SYSTEM ID" |
| var="変数名" |
| scope="page|request|session|application" |
| result="出力先" |
| <x:param> * | - | XSL に渡すパラメータです. |
| xml 属性、doc 属性が省略された場合の変換対象 XML. | ||
説 明
XML に対して XSL 変換を実行し、結果を出力または変数に格納します。
XSL も <x:parse> と同様に XML 解析を伴う重い処理です。サーブレットコンテナ起動中に XSL ファイルが変更されないことが保障されているなら、解析済みの XSL から
DOMSource
を作成して application スコープに設定しておくことをお勧めします
(本当なら
Templates
が参照できると良いのだが…)。
JSP
<c:if test="${empty xsl}">
<c:import var="xslsrc" url="foo.xsl" />
<%
String xml = (String)pageContext.findAttribute("xslsrc");
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(new InputSource(new StringReader(xml)));
Source src = new DOMSource(doc);
pageContext.setAttribute("xsl", src, PageContext.APPLICATION_SCOPE);
%>
</c:if>
<x:transform xslt="${xsl}" ... />
※XSL を DOMSource として構築する場合は DocumentBuilderFactory
の setNamespaceAware() に true を指定する必要があります。
属 性
optional
optional
推奨されません。xml から始まる属性名は XML 仕様で予約されています。代わりに docSystemId 属性を使用してください。
optional
var で指定した変数のスコープです。
page, request, session,
application のいずれかを指定することが出来ます。
内 容
xml 属性、doc 属性が省略された場合の変換対象 XML。
使用例
簡単な XSL 変換を行います。例証のため同一 JSP 内で XML と XSL を記述していますが、実際に使用する場合は
処理対象の XML はこのタグの内部に直接記述することができます。
タグの内部で
<c:import> で外部ファイルなどから読み込んだりサーブレットから連携されたりするでしょう。
JSP
<c:set var="xml">
<?xml version="1.0"?>
<colors>
<color name="red" rgb="FF0000" />
<color name="green" rgb="008000" />
<color name="blue" rgb="0000FF" />
</colors>
</c:set>
<c:set var="xsl">
<?xml version="1.0"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" />
<xsl:template match="/">
<b>カラーリファレンス</b><br/>
<xsl:for-each select="colors/color">
<span style="color:{@name};">
<xsl:value-of select="@name" /> = #<xsl:value-of select="@rgb" />
</span>
<br/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
</c:set>
<x:transform doc="${xml}" xslt="${xsl}" />
実行結果
カラーリファレンス red = #FF0000 green = #008000 blue = #0000FF
JSP
<x:transform xslt="${xsl}">
<?xml version="1.0"?>
<colors>
<color name="red" rgb="FF0000" />
<color name="green" rgb="008000" />
<color name="blue" rgb="0000FF" />
</colors>
</x:transform>
実行結果
カラーリファレンス red = #FF0000 green = #008000 blue = #0000FF
<x:param> を使用することで XSL に渡すパラメータを指定することができます。これはユーザの入力値から対応するノードを選択したり、リンクを生成するためにコンテキストパスを渡す場合などに使用します。
JSP
<c:set var="xsl"> <?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="html" /> <xsl:param name="target" /> <xsl:template match="/"> <b>カラーリファレンス</b><br/> <xsl:for-each select="colors/color[@name=$target]"> <span style="color:{@name};"> <xsl:value-of select="@name" /> = #<xsl:value-of select="@rgb" /> </span> <br/> </xsl:for-each> </xsl:template> </xsl:stylesheet> </c:set> <x:transform xslt="${xsl}"> <?xml version="1.0"?> <colors> <color name="red" rgb="FF0000" /> <color name="green" rgb="008000" /> <color name="blue" rgb="0000FF" /> </colors> <x:param name="target" value="${param['color']}" /> </x:transform>
color=green のリクエストパラメータで実行した場合は以下の出力になります。
実行結果
カラーリファレンス
green = #008000