ループ

コアタグ

1. <xsl:value-of>

役割:指定したXMLノードのテキスト内容を取り出し、結果ドキュメントへ出力します。

<!-- 最初のcatalog/cd配下のtitleの値を取得(ループなしでは1件目だけ取得) -->
<xsl:value-of select="catalog/cd/title" />Code language: HTML, XML (xml)

<xsl:for-each>ループと組み合わせない場合、最初にマッチしたノードのみ取得され、全データを走査できません。

2. <xsl:for-each>

役割:条件に合致したXMLノード群を繰り返し処理し、複数レコードを一括処理します。

<xsl:for-each select="class/student">
    <li><xsl:value-of select="name"/><xsl:value-of select="age"/></li>
</xsl:for-each>Code language: HTML, XML (xml)

XPathフィルタ構文

selectパスの後に[条件]を記述してノードを絞り込み、データフィルタを実現します

<!-- artistがBob Dylanのcdレコードのみ出力 -->
<xsl:for-each select="catalog/cd[artist='Bob Tom']">Code language: HTML, XML (xml)

利用可能な演算子

演算子XPath記述意味
==等しい
!=!=等しくない
<&lt;より小さい(<を直接書かず、エスケープ必須
>&gt;より大きい(>を直接書かず、エスケープ必須

例:価格が10未満のCDを抽出

<xsl:for-each select="catalog/cd[price &lt; 10]">Code language: HTML, XML (xml)

前のサンプル

student.xsl
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<head>
</head>
<body>
    <ul>
        <!-- studentノードをすべて走査 -->
        <xsl:for-each select="class/student">
            <li><xsl:value-of select="name"/><xsl:value-of select="age"/></li>
        </xsl:for-each>
    </ul>
</body>
</html>
</xsl:template>
</xsl:stylesheet>Code language: HTML, XML (xml)

対応するXML(student.xml)

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="student.xsl"?>
<class>
    <student>
        <name>Jack</name>
        <age>16</age>
    </student>
    <student>
        <name>Jim</name>
        <age>12</age>
    </student>
</class>Code language: HTML, XML (xml)

フィルタを追加

年齢が14歳より大きい生徒のみ出力

<xsl:for-each select="class/student[age &gt; 14]">
    <li><xsl:value-of select="name"/><xsl:value-of select="age"/></li>
</xsl:for-each>Code language: HTML, XML (xml)

ループ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です