フィルタ(抽出)処理2

フィルタ(抽出)処理 1」では、繰り返し処理<xsl:for-each>を使い条件に合致したデータを取り出していた。同様のことが<xsl:apply-templates>を使ってもできる。<xsl:apply-templates>はselect属性で指定されたノードセットを準じ探査し、該当するテンプレートを適用していく。即ち繰り返し処理を行う。だからselect属性に、<xsl:for-each>の場合と同じように抽出条件を指定すればよい。

[サンプルXML文書を表示](下のフレームに)

XMLソース

<?xml version="1.0" encoding="Shift_JIS" ?>
<?xml-stylesheet type="text/xsl" href="filter02.xsl"?>
<root>
<top>ソート処理_2</top>
<contents>
<city><name>倉吉市</name><ken gp="中国" nu="001">鳥取県</ken></city>
<city><name>高槻市</name><ken gp="近畿" nu="259">大阪府</ken></city>
<city><name>姫路市</name><ken gp="近畿" nu="983">兵庫県</ken></city>
<city><name>倉敷市</name><ken gp="中国" nu="333">岡山県</ken></city>
<city><name>鳥取市</name><ken gp="中国" nu="390">鳥取県</ken></city>
<city><name>神戸市</name><ken gp="近畿" nu="174">兵庫県</ken></city>
<city><name>宗像市</name><ken gp="九州" nu="990">福岡県</ken></city>
<city><name>摂津市</name><ken gp="近畿" nu="846">大阪府</ken></city>
<city><name>下関市</name><ken gp="中国" nu="001">山口県</ken></city>
<city><name>宝塚市</name><ken gp="近畿" nu="105">兵庫県</ken></city>
<city><name>堺 市</name><ken gp="近畿" nu="548">大阪府</ken></city>
<city><name>熊本市</name><ken gp="九州" nu="361">熊本県</ken></city>
<city><name>津山市</name><ken gp="中国" nu="772">岡山県</ken></city>
<city><name>米子市</name><ken gp="中国" nu="285">鳥取県</ken></city>
<city><name>松原市</name><ken gp="近畿" nu="283">大阪府</ken></city>
<city><name>福岡市</name><ken gp="九州" nu="652">福岡県</ken></city>
<city><name>長門市</name><ken gp="中国" nu="662">山口県</ken></city>
<city><name>西宮市</name><ken gp="近畿" nu="190">兵庫県</ken></city>
<city><name>境港市</name><ken gp="中国" nu="669">鳥取県</ken></city>
<city><name>小倉市</name><ken gp="九州" nu="147">福岡県</ken></city>
</contents>
<end>以上です(04/5/24)</end>
</root>

XSLソース

<?xml version="1.0" encoding="Shift_Jis"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="Shift_JIS"/>

<xsl:template match="/">
<center><H3><xsl:value-of select="root/top"/></H3></center>
<H4>"ken"要素が"大阪府"のものだけを抽出する</H4>
<xsl:apply-templates select="root/contents/city[ken='大阪府']"/>
<H4>"ken"要素の"nu"属性が500以上のものだけを抽出する</H4>
<xsl:apply-templates select="root/contents/city[ken/@nu >= 500]"/>
<H4>"ken"要素の"gp"属性が"近畿"、または"nu"属性が200以下のものだけを抽出する</H4>
<xsl:apply-templates select="root/contents/city[ken/@gp='近畿'] | root/contents/city[ken/@nu &lt;= 200]"/>
</xsl:template>


<xsl:template match="city">
<xsl:value-of select="name" /><BR/>
</xsl:template>
</xsl:stylesheet>

end(04/5/24)