サンプルで覚えるXSLTプログラミング

14. その他の関数

 これまでの分類に入らなかった関数を紹介します。


document(uri)

引数 引数タイプ
uri URI

document('another.xml')は、“another.xml”ドキュメントのルートを返します。 また document('')は、その文書のルートを返します。


element-available(string)

引数 引数タイプ
string 文字列

string引数で与えられたXSLTノードが、XSLTプロセッサで処理できるかどうかを返します。返り値はbool代数で返されます。

例:
element-available('xsl:apply-imports')
element-available('xsl:apply-templates')
element-available('xsl:attribute')
element-available('xsl:call-template')
element-available('xsl:choose')
element-available('xsl:comment')
element-available('xsl:copy')
element-available('xsl:copy-of')
element-available('xsl:element')
element-available('xsl:fallback')
element-available('xsl:for-each')
element-available('xsl:if')
element-available('xsl:message')
element-available('xsl:number')
element-available('xsl:processing-instruction')
element-available('xsl:text')
element-available('xsl:value-of')
element-available('xsl:variable')

XSLT1.0に準拠しているXSLTプロセッサであれば、これらはすべて“true”を返します。


function-available(string)

引数 引数タイプ
string 文字列

string引数で与えられた関数が、XSLTプロセッサで処理できるかどうかを返します。返り値はbool型です。

例:function-available('function-available')

は“ture”を返します。


generate-id(node)

引数 引数タイプ
node ノード表現

node引数に対して固有の値を割り当てます。返り値は文字列です。

(XML文書:drugs.xml)

<?xml version="1.0" encoding="Shift_JIS"?>
<?xml-stylesheet type="text/xsl" href="drugs.xsl"?>
<companies>
  <company>
    <name>Merck</name>
    <drugs>
      <drug>Zocor</drug>
      <drug>Vasotec</drug>
      <drug>Crixivan</drug>
    </drugs>
  </company>
  <company>
    <name>Bristol-Myers Squibb</name>
    <drugs>
      <drug>Paravachol</drug>
      <drug>TAXOL</drug>
    </drugs>
  </company>
  <company>
    <name>Pfizer</name>
    <drugs>
      <drug>Viagra</drug>
      <drug>Norvasc</drug>
      <drug>Procardia XL</drug>
    </drugs>
  </company>
</companies>

(XSLTプログラム:drugs.xsl)

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


<xsl:output method="html" encoding="Shift_JIS"/>

<xsl:template match="/">
  <html>
    <body>
      <h1>薬品</h1>
      <xsl:for-each select="//drug">
        <xsl:call-template name="drug"/>
      </xsl:for-each>
      <h2>製薬会社</h2>
      <xsl:apply-templates select="//company"/>
    </body>
  </html>
</xsl:template>


<xsl:template name="drug">
  <a href="#{generate-id(../../name)}">
    <xsl:value-of select="current()"/>
  </a><br/>
</xsl:template>


<xsl:template match="company">
  <a href="{generate-id(name)}">
    <xsl:value-of select="name"/>
  </a><br/>
</xsl:template>
</xsl:stylesheet>

<a href="#{generate-id(../../name)}">では、各<drug>ノードに対して、その親の兄弟ノードである<name>ノード固有のIDを<a>タグのhref属性に返し、ノードの中身である薬品名を入れたあと</a>で<a>タグを閉じ、<br/>タグを出力します。

<xsl:template match="company">では、それぞれの<company>ノードについてその子ノードである<name>ノード固有のIDを<a>タグのhref属性に返し、ノードの中身である薬品会社名を入れたあと</a>で<a>タグを閉じ、<br/>タグを出力します。

(出力された結果)

<html>
<body>
  <h1>薬品</h1>
  <a href="#ID6">Zocor</a>
  <br>
  <a href="#ID6">Vasotec</a>
  <br>
  <a href="#ID6">Crixivan</a>
  <br>
  <a href="#ID24">Paravachol</a>
  <br>
  <a href="#ID24">TAXOL</a>
  <br>
  <a href="#ID39">Viagra</a>
  <br>
  <a href="#ID39">Norvasc</a>
  <br>
  <a href="#ID39">Procardia XL</a>
  <br>
  <h2>製薬会社</h2>
  <a href="ID6">Merck</a>
  <br>
  <a href="ID24">Bristol-Myers Squibb</a>
  <br>
  <a href="ID39">Pfizer</a>
  <br>
</body>
</html>

 


id(any)

引数 引数タイプ
any 指定なし

any引数で与えられたidに該当するノードを、ノード表現で返します。


key(string, any)

引数 引数タイプ
string 文字列
any 指定なし

stringで与えられたHashに、anyで指定されているノード表現を返します。


system-property(string)

引数 引数タイプ
string 文字列

string引数のXSLTプロセッサ固有の値(例えばXSLTのベンダー名など)を返します。返り値は引数などに依存します。

例:
system-property('xsl:version')
system-property('xsl:vendor')
system-property('xsl:vendor-url')

上記の例でOracleのXSLTプロセッサを使用したときに、上から“1.0”、“Oracle”そして“www.oracle.com”が返されます。


unparsed-entity-uri()

<!ENTITY>タグで指定されている値を文字列で返します。


Index
サンプルで覚えるXSLTプログラミング
  1. XMLからHTMLへの変換
スタイルシートはどのように解釈されるか
  2. XPathの基礎知識
XML文書をツリー構造で見る
XPathの表記方法
  3. XSLTエレメントの概要
コラム XSLTプロセッサのインストール
  4. テンプレート系XSLTエレメント
テンプレートの定義
該当するテンプレートの適用
指定されたテンプレートの呼び出し
  5. 変数系XSLTエレメント
変数の定義1
変数の定義2
  6. 出力系XSLTエレメント
該当する表現の値を代入
エレメントノードの生成
属性ノードの生成
テキストノードの生成
コメントノードの生成
PI(processing-instruction)の生成
出力方法の指定
  7. フローコントロール系XSLTエレメント
ループ処理
条件分岐
IF文
  8. その他のXSLTエレメント
他のXSLファイルの読み込み
数の割り当て
  9.XSLT関数の概要
関数の主な分類
  10. 文字列系関数
文字列の連結
文字列の調査
数字のフォーマッティング
空白の除去
……
  11. 数値計算系関数
切り上げ
表現の数を数える
切り下げ
数値型への変換
四捨五入
加算
  12. ノードに関する関数
  13. bool代数系関数
14. その他の関数
  15. JavaによるXSLTの拡張
Built-inクラスの呼び出し
カスタムメイドの関数を作る




XML & SOA フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

HTML5+UX 記事ランキング

本日月間