<x:parse>
SYNOPSIS
説 明
XML 文字列を解析します。これは文字列や入力ストリームから DOM を生成して 変数に格納するのと同じ意味です。外部ファイルとして存在する XML や、サーブ レットなどから文字列で連携された XML を JSTL の XML 機能で使用する事を 目的としています。
XML 解析は負荷の高い部類の処理です。パフォーマンスが重要となるシステムでこの
機能を多用するような設計はお勧めできません。静的な XML ファイルの場合は
解析結果を application スコープなどの変数に格納し、表示のたびに
解析が行われないよう注意する必要があります。
JSP が既に
Document
オブジェクトを得ている場合はこの解析処理は必要ありません。サーブレットなど
からのデータ連携は文字列の XML ではなく Document オブジェクトで行う
ようにして下さい。
<c:import> 属 性
varDom よりこちらの属性を使用してください。
解析した XML の内容を格納する変数名です。var 属性と異なり、
ここで指定した変数には
org.w3c.dom.Document
のインスタンスが格納されます。このため、この機能を実行した時点で
確実に XML の解析処理が行われます (たとえその変数がどこからも
使われなくても)。
「続くサーブレットや拡張タグに渡すために Document オブジェクト
が必要」というような特別な理由がなければ、通常は var
属性を使用してください。
var で指定した変数のスコープです。
page, request, session,
application のいずれかを指定することが出来ます。
varDom で指定した変数のスコープです。
page, request, session,
application のいずれかを指定することが出来ます。
解析対象の XML ドキュメントを文字列または Reader で指定します。
一般的には、事前に <c:import> で読み込んだ XML ファイルの内容や、
サーブレットなどから渡された XML 文字列の変数名を EL で指定します。
xml 属性も doc 属性も省略した場合はこのタグの内容を
XML 文字列として解析します。
org.xml.sax.XMLFilter内 容
使用例
greeting に格納されている XML 文字列を解析して <greeting>
要素内のテキストを出力します。
以下の実行結果は 「hello, world」 となります。
<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" />
news.xml という名前の XML ファイルを読み込んで解析し、
全ての記事の内容を出力します。
<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>
<?xml version="1.0"?> <news> <article date="2007/12/01">とうとう師走に入りました。寒さが空腹に染みます。</article> <article date="2007/12/25">何もありませんでした。</article> </news>
application スコープの変数 catalogue に値が設定されていなければ
catalogue.xml を読み込んで解析結果を格納します。サーブレットコンテナ起動中に
変更されない事が保障されている XML ファイルであれば、このように記述することで同じ内容を
何度も解析せずに済みます。
<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>