xsl:call-template 記述例

ソースXML文書

<?xml version="1.0" encoding="Shift_JIS" ?>
<book>
  <title>XMLマスターとは</title>
  <price>2500</price>
</book>

XSLTスタイルシート
<?xml version="1.0" encoding="Shift_JIS" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
    <magazine>
      <title-price>
        <xsl:call-template name="booktemp" />
      </title-price>
    </magazine>
  </xsl:template>
  <xsl:template name="booktemp">
   <xsl:value-of select="book/title" />
   <xsl:value-of select="book/price" />
  </xsl:template>
</xsl:stylesheet>

結果XML文書
<?xml version="1.0" encoding="UTF-8"?>
<magazine>
 <title-price>
   XMLマスターとは
   2500
 </title-price>
</magazine>
xsl:apply-templates要素とxsl:call-template要素には、カレントノードの遷移の仕方に違いがある。apply要素で他のテンプレートルールを呼び出した場合、カレントノードは選択されたノードに移動する。一方、call要素では他のテンプレートを呼び出してもカレントノードは移動しない。

ソースXML文書

<?xml version="1.0" encoding="Shift_JIS" ?>
<book>
  <title>XMLマスターとは</title>
  <price>2500</price>
</book>

XSLTスタイルシート
<?xml version="1.0" encoding="Shift_JIS" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
    <magazine>
      <xsl:apply-templates select="book" />
      <xsl:call-template name="booktemp" />
    </magazine>
  </xsl:template>
 
  <xsl:template match="book" name="booktemp">
    <title>
      <xsl:value-of select="title" />
    </title>
  </xsl:template>
</xsl:stylesheet>

※ <xsl:call-template name="booktemp" />はカレントノードは遷移しないので、テンプレートルールを呼び出した場合、カレントノードは「/」となる。「/」の子要素にtitle要素は存在しないので、xsl:value-of要素は結果に何も生成せずに下記の結果を出力する。
結果XML文書
<?xml version="1.0" encoding="UTF-8"?>
<magazine>
 <title>XMLマスターとは</title>
 <title/>
</magazine>
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License