<x:transform>
xmlns:x="http://java.sun.com/jsp/jstl/xml"

SYNOPSIS

<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.
</x:transform>

説 明

XML に対して XSL 変換を実行し、結果を出力または変数に格納します。

XSL も <x:parse> と同様に XML 解析を伴う重い処理です。サーブレットコンテナ起動中に XSL ファイルが変更されないことが保障されているなら、解析済みの XSL から DOMSourceJava™ API リファレンス を作成して application スコープに設定しておくことをお勧めします (本当なら TemplatesJava™ API リファレンス が参照できると良いのだが…)。

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 として構築する場合は DocumentBuilderFactorysetNamespaceAware() に true を指定する必要があります。

参照: <x:param>  <x:parse> 

属 性

doc="XMLドキュメント"
optional

XSL 変換処理を行う XML ドキュメントです。 String, Reader, DocumentJava™ API リファレンス, SourceJava™ API リファレンス あるいは <x:parse><x:set> で設定したオブジェクトを指定できます。

この属性が省略された場合はタグ内部の記述を XML として処理を試みます。

xml="XMLドキュメント"
optional

推奨されません。xml から始まる属性名は XML 仕様で予約されています。代わりに doc 属性を使用してください。

xslt="XSL"
required

変換処理を記述した XSL 文字列です。 String, Reader または SourceJava™ API リファレンス を指定できます。

docSystemId="SYSTEM ID"
optional

処理対象の XML のシステム ID です。 DTD や実体参照を解決するために使用されます。

xmlSystemId="SYSTEM ID"
optional

推奨されません。xml から始まる属性名は XML 仕様で予約されています。代わりに docSystemId 属性を使用してください。

xsltSystemId="SYSTEM ID"
optional

XSL のシステム ID を指定します。

var="変数名"
optional

変換後の XML を格納する変数名です。 DocumentJava™ API リファレンス オブジェクトが格納されます。この属性が指定された場合は変換結果の出力は行われません。

scope="page|request|session|application"
optional
var で指定した変数のスコープです。 page, request, session, application のいずれかを指定することが出来ます。
result="出力先"
optional

変換結果の出力先 ResultJava™ API リファレンス オブジェクトを指定します。

内 容

xml 属性、doc 属性が省略された場合の変換対象 XML。
XSL に渡すパラメータです。 TransformerJava™ API リファレンスsetParameter() に渡されます。この値は XSL 内から $name として参照することができます。

使用例

簡単な XSL 変換を行います。例証のため同一 JSP 内で XML と XSL を記述していますが、実際に使用する場合は <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
処理対象の XML はこのタグの内部に直接記述することができます。
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
CVS 2008/03/09