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

SYNOPSIS

<x:parse
var†1="変数名"
varDom†1="変数名"
scope="page|request|session|application"
scopeDom="page|request|session|application"
xml="XML"
doc="XML"
systemId="SYSTEM ID"
filter="クラス完全限定名"
>
xml 属性、doc 属性省略時の解析対象 XML.
</x:parse>

説 明

XML 文字列を解析します。これは文字列や入力ストリームから DOM を生成して変数に格納するのと同じ意味です。外部ファイルとして存在する XML や、サーブレットなどから文字列で連携された XML を JSTL の XML 機能で使用する事を目的としています。

XML 解析は負荷の高い部類の処理です。パフォーマンスが重要となるシステムでこの機能を多用するような設計はお勧めできません。静的な XML ファイルの場合は解析結果を application スコープなどの変数に格納し、表示のたびに解析が行われないよう注意する必要があります。

JSP が既に DocumentJava™ API リファレンス オブジェクトを得ている場合はこの解析処理は必要ありません。サーブレットなどからのデータ連携は文字列の XML ではなく Document オブジェクトで行うようにして下さい。

参照: <c:import> 

属 性

var="変数名"
selective required 1
解析した XML の内容を格納する変数名です。変数にどのようなオブジェクトが格納されるかは JSTL の実装に依存しています (このため JSTL 実装は実際にこのオブジェクトから内容を取り出そうとするときに解析を行う遅延評価の実装も可能です)。解析した XML を JSP 内でしか使用しないのであれば varDom よりこちらの属性を使用してください。
varDom="変数名"
selective required 1

解析した XML の内容を格納する変数名です。var 属性と異なり、ここで指定した変数には org.w3c.dom.DocumentJava™ API リファレンス のインスタンスが格納されます。このため、この機能を実行した時点で確実に XML の解析処理が行われます (たとえその変数がどこからも使われなくても)。

「続くサーブレットや拡張タグに渡すために Document オブジェクトが必要」というような特別な理由がなければ、通常は var 属性を使用してください。

scope="page|request|session|application"
optional
var で指定した変数のスコープです。 page, request, session, application のいずれかを指定することが出来ます。
scopeDom="page|request|session|application"
optional
varDom で指定した変数のスコープです。 page, request, session, application のいずれかを指定することが出来ます。
xml="XML"
optional
推奨されません。xml から始まる属性名は XML 仕様で予約されています。代わりに doc 属性を使用してください。
doc="XML"
optional

解析対象の XML ドキュメントを文字列または Reader で指定します。一般的には、事前に <c:import> で読み込んだ XML ファイルの内容や、サーブレットなどから渡された XML 文字列の変数名を EL で指定します。

xml 属性も doc 属性も省略した場合はこのタグの内容を XML 文字列として解析します。

systemId="SYSTEM ID"
optional
解析対象の XML ドキュメントのシステム ID (URI) です。 XML 内で DTD や Schema などの外部ファイルが相対パスで記述されている場合、この値に基づいてそれらの場所を解決します。
filter="クラス完全限定名"
optional
XML の解析に使用するパーサを指定します。よりパフォーマンスの高いパーサを使用したい場合や、解析する XML が特定の SAX パーサに依存している場合などに使用します。値は org.xml.sax.XMLFilterJava™ API リファレンス インターフェースのサブクラス名です。

内 容

xml 属性、doc 属性省略時の解析対象 XML。 EL やカスタムタグを使用することができます。

使用例

変数 greeting に格納されている XML 文字列を解析して <greeting> 要素内のテキストを出力します。以下の実行結果は「hello, world」となります。
JSP
<c:set var="greeting">
<?xml version="1.0"?>
<greeting>hello, world</greeting>
</c:set>
<x:parse var="xml" doc="${greeting}" />
<x:out select="$xml/greeting" />
JSP と同じディレクトリに存在する news.xml という名前の XML ファイルを読み込んで解析し、全ての記事の内容を出力します。
JSP
<c:import var="newssrc" url="news.xml" charEncoding="UTF-8" />
<x:parse var="news" doc="${newssrc}" />
<x:forEach select="$news/article">
    <x:out select="@date" />: <x:out select="." /><br>
</x:forEach>
news.xml
<?xml version="1.0"?>
<news>
  <article date="2007/12/01">とうとう師走に入りました。寒さが空腹に染みます。</article>
  <article date="2007/12/25">何もありませんでした。</article>
</news>
application スコープの変数 catalogue に値が設定されていなければ catalogue.xml を読み込んで解析結果を格納します。サーブレットコンテナ起動中に変更されない事が保障されている XML ファイルであれば、このように記述することで同じ内容を何度も解析せずに済みます。
JSP
<c:if test="${empty catalogue}">
  <c:import var="xmlsrc" url="catalogue.xml" charEncoding="UTF-8" />
  <x:parse var="catalogue" doc="${xmlsrc}" scope="application" />
</c:if>
CVS 2008/03/09