document() 関数 | |
複数のソースのドキュメントを、1 つのスタイルシートで処理できるようにします。この非常に強力で柔軟性のある関数については第 7 章で説明しているので、ここでは、この関数の簡単な概要のみを示します。 | |
入力 | |
document() 関数は、一般的に文字列をパラメータとして受け取ります。この文字列は URI として扱われ、XSLT プロセッサはこの URI を開き、解析を試みます。文字列が空である (関数呼び出しが document('')) 場合、document() 関数はスタイルシートそのものを解析します。document() 関数のパラメータのすべての詳細については、第 7 章の 7.3 節を参照してください。 |
|
出力 | |
入力パラメータによって識別されるノードを含むノードセット。第 7 章 にすべての詳細が示されているので、ここでは説明を省略します。 |
|
定義先 | |
XSLT 12.1 節「Multiple Source Documents」 |
|
例 | |
次の例では、document() 関数と空の文字列を使用して参照テーブルを実装しています。この XML ドキュメントは次のとおりです。 <?xml version="1.0"?> <report> <title>Miles Flown in 2001</title> <month sequence="01"> <miles-flown>12379</miles-flown> <miles-earned>35215</miles-earned> </month> <month sequence="02"> <miles-flown>32857</miles-flown> <miles-earned>92731</miles-earned> </month> <month sequence="03"> <miles-flown>19920</miles-flown> <miles-earned>76725</miles-earned> </month> <month sequence="04"> <miles-flown>18903</miles-flown> <miles-earned>31781</miles-earned> </month> </report> document() 関数を使用して、<month> 要素の sequence 属性を対応する月に変換できます。スタイルシートは次のとおりです。 <?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:months="Lookup table for month names"> <months:name sequence="01">January</months:name> <months:name sequence="02">February</months:name> <months:name sequence="03">March</months:name> <months:name sequence="04">April</months:name> <months:name sequence="05">May</months:name> <months:name sequence="06">June</months:name> <months:name sequence="07">July</months:name> <months:name sequence="08">August</months:name> <months:name sequence="09">September</months:name> <months:name sequence="10">October</months:name> <months:name sequence="11">November</months:name> <months:name sequence="12">December</months:name> <xsl:output method="text"/> <xsl:variable name="newline"> <xsl:text> </xsl:text> </xsl:variable> <xsl:template match="/"> <xsl:value-of select="$newline"/> <xsl:text>A test of the document() function:</xsl:text> <xsl:value-of select="$newline"/> <xsl:value-of select="$newline"/> <xsl:for-each select="/report/month"> <xsl:text> </xsl:text> <xsl:value-of select="document('')/*/months:name[@sequence=current()/@sequence]"/> <xsl:text> - </xsl:text> <xsl:value-of select="format-number(miles-flown, '##,###')"/> <xsl:text> miles flown, </xsl:text> <xsl:value-of select="format-number(miles-earned, '##,###')"/> <xsl:text> miles earned.</xsl:text> <xsl:value-of select="$newline"/> <xsl:text> (Averaged </xsl:text> <xsl:value-of select="format-number(miles-earned div miles-flown, '##.#')"/> <xsl:text> miles earned for each mile flown.)</xsl:text> <xsl:value-of select="$newline"/> <xsl:value-of select="$newline"/> </xsl:for-each> </xsl:template> </xsl:stylesheet> この結果は次のとおりです。出力には正しい月が含まれています。 A test of the document() function: January - 12,379 miles flown, 35,215 miles earned. (Averaged 2.8 miles earned for each mile flown.) February - 32,857 miles flown, 92,731 miles earned. (Averaged 2.8 miles earned for each mile flown.) March - 19,920 miles flown, 76,725 miles earned. (Averaged 3.9 miles earned for each mile flown.) April - 18,903 miles flown, 31,781 miles earned. (Averaged 1.7 miles earned for each mile flown.) |