Xslt-quick-guide

提供:Dev Guides
移動先:案内検索

XSLTの概要

XSL

XSLTを学習する前に、まずE * X tensible S tylesheet L * anguageを表すXSLを理解する必要があります。 CSSはHTMLであるため、XMLに似ています。

XSLの必要性

HTMLドキュメントの場合、テーブル、div、スパンなどのタグが事前に定義されています。ブラウザはスタイルを追加し、CSSスタイルを使用してそれらを表示する方法を知っています。 ただし、XMLドキュメントの場合、タグは事前定義されていません。 XMLドキュメントを理解してスタイルを設定するために、World Wide Web Consortium(W3C)は、XMLベースのスタイルシート言語として機能できるXSLを開発しました。 XSLドキュメントは、ブラウザがXMLドキュメントをレンダリングする方法を指定します。

XSLの主要な部分は次のとおりです-

  • XSLT -XMLドキュメントをさまざまな他のタイプのドキュメントに変換するために使用されます。
  • XPath -XMLドキュメントをナビゲートするために使用されます。
  • XSL-FO -XMLドキュメントのフォーマットに使用されます。

XSLTとは

XSLT、Extensible Stylesheet Language Transformationsは、XMLデータをある形式から別の形式に自動的に変換する機能を提供します。

XSLTの仕組み

XSLTスタイルシートは、ターゲットXMLドキュメントに適用される変換ルールを定義するために使用されます。 XSLTスタイルシートはXML形式で記述されています。 XSLT ProcessorはXSLTスタイルシートを取得し、ターゲットXMLドキュメントに変換ルールを適用してから、XML、HTMLまたはテキスト形式の形式でフォーマットされたドキュメントを生成します。 このフォーマットされたドキュメントは、XSLTフォーマッターによって利用され、エンドユーザーに表示される実際の出力が生成されます。

XSLTのワークフロー

利点

XSLTを使用する利点は次のとおりです-

  • プログラミングに依存しません。 変換は別のxslファイルに書き込まれますが、これもXMLドキュメントです。
  • xslファイルの変換を変更するだけで、出力を変更できます。 コードを変更する必要はありません。 そのため、Webデザイナーはスタイルシートを編集して、出力の変更をすばやく確認できます。

XSLT構文

次のサンプルXMLファイル、students.xmlがあり、適切にフォーマットされたHTMLドキュメントに変換する必要があるとします。

*students.xml*
<?xml version = "1.0"?>
<class>
   <student rollno = "393">
      <firstname>Dinkar</firstname>
      <lastname>Kad</lastname>
      <nickname>Dinkar</nickname>
      <marks>85</marks>
   </student>
   <student rollno = "493">
      <firstname>Vaneet</firstname>
      <lastname>Gupta</lastname>
      <nickname>Vinni</nickname>
      <marks>95</marks>
   </student>
   <student rollno = "593">
      <firstname>Jasvir</firstname>
      <lastname>Singh</lastname>
      <nickname>Jazz</nickname>
      <marks>90</marks>
   </student>
</class>

次の基準を満たすために、上記のXMLドキュメントのXSLTスタイルシートドキュメントを定義する必要があります-

  • ページには*生徒*というタイトルが必要です。
  • ページには、学生の詳細の表が必要です。
  • 列には次のヘッダーが必要です:ロール番号、名、姓、ニックネーム、マーク
  • テーブルには、それに応じて学生の詳細が含まれている必要があります。

ステップ1:XSLTドキュメントを作成する

上記の要件を満たすXSLTドキュメントを作成し、students.xslという名前を付けて、students.xmlと同じ場所に保存します。

*students.xsl*
<?xml version = "1.0" encoding = "UTF-8"?>
<!-- xsl stylesheet declaration with xsl namespace:
Namespace tells the xlst processor about which
element is to be processed and which is used for output purpose only
-->
<xsl:stylesheet version = "1.0"
xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">
<!-- xsl template declaration:
template tells the xlst processor about the section of xml
document which is to be formatted. It takes an XPath expression.
In our case, it is matching document root element and will
tell processor to process the entire document with this template.
-->
   <xsl:template match = "/">
      <!-- HTML tags
         Used for formatting purpose. Processor will skip them and browser
            will simply render them.
      -->

      <html>
         <body>
            <h2>Students</h2>

            <table border = "1">
               <tr bgcolor = "#9acd32">
                  <th>Roll No</th>
                  <th>First Name</th>
                  <th>Last Name</th>
                  <th>Nick Name</th>
                  <th>Marks</th>
               </tr>

               <!-- for-each processing instruction
               Looks for each element matching the XPath expression
               -->

               <xsl:for-each select="class/student">
                  <tr>
                     <td>
                        <!-- value-of processing instruction
                        process the value of the element matching the XPath expression
                        -->
                        <xsl:value-of select = "@rollno"/>
                     </td>

                     <td><xsl:value-of select = "firstname"/></td>
                     <td><xsl:value-of select = "lastname"/></td>
                     <td><xsl:value-of select = "nickname"/></td>
                     <td><xsl:value-of select = "marks"/></td>

                  </tr>
               </xsl:for-each>

            </table>
         </body>
      </html>
   </xsl:template>
</xsl:stylesheet>

ステップ2:XSLTドキュメントをXMLドキュメントにリンクする

次のxml-stylesheetタグでstudent.xmlドキュメントを更新します。 student.xslにhref値を設定します

<?xml version = "1.0"?>
<?xml-stylesheet type = "text/xsl" href = "students.xsl"?>
<class>
...
</class>

手順3:Internet ExplorerでXMLドキュメントを表示する

*students.xml*
<?xml version = "1.0"?>
<?xml-stylesheet type = "text/xsl" href = "students.xsl"?>
<class>
   <student rollno = "393">
      <firstname>Dinkar</firstname>
      <lastname>Kad</lastname>
      <nickname>Dinkar</nickname>
      <marks>85</marks>
   </student>
   <student rollno = "493">
      <firstname>Vaneet</firstname>
      <lastname>Gupta</lastname>
      <nickname>Vinni</nickname>
      <marks>95</marks>
   </student>
   <student rollno = "593">
      <firstname>Jasvir</firstname>
      <lastname>Singh</lastname>
      <nickname>Jazz</nickname>
      <marks>90</marks>
   </student>
</class>

出力

フォーマットされた出力

XSLT <テンプレート>

<xsl:template>は、特定のタイプ/コンテキストのノードに必要な出力を生成するためにテンプレートを再利用する方法を定義します。

宣言

以下は、 <xsl:template> 要素の構文宣言です。

<xsl:template
   name = Qname
   match = Pattern
   priority = number
   mode = QName >
</xsl:template>

属性

Sr.No Name & Description
1

name

テンプレートが適用される要素の名前。

2

match

テンプレートが適用される要素を示すパターン。

3

priority

テンプレートの優先順位番号。 優先度の低いテンプレートのマッチングは、優先度の高いテンプレートの前からは考慮されません。

4

mode

要素を複数回処理して、毎回異なる結果を生成できます。

要素

Number of occurrences Unlimited
Parent elements xsl:stylesheet, xsl:transform
Child elements xsl:apply-imports,xsl:apply-templates,xsl:attribute, xsl:call-template, xsl:choose, xsl:comment, xsl:copy, xsl:copy-of, xsl:element, xsl:fallback, xsl:for-each, xsl:if, xsl:message, xsl:number, xsl:param, xsl:processing-instruction, xsl:text, xsl:value-of, xsl:variable, output elements

デモ例

このテンプレートルールには、<student>要素を識別し、表形式で出力を生成するパターンがあります。

*students.xml*
<?xml version = "1.0"?>
<?xml-stylesheet type = "text/xsl" href = "students.xsl"?>
<class>
   <student rollno = "393">
      <firstname>Dinkar</firstname>
      <lastname>Kad</lastname>
      <nickname>Dinkar</nickname>
      <marks>85</marks>
   </student>
   <student rollno = "493">
      <firstname>Vaneet</firstname>
      <lastname>Gupta</lastname>
      <nickname>Vinni</nickname>
      <marks>95</marks>
   </student>
   <student rollno = "593">
      <firstname>Jasvir</firstname>
      <lastname>Singh</lastname>
      <nickname>Jazz</nickname>
      <marks>90</marks>
   </student>
</class>
*students_imports.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>
         <body>
            <h2>Students</h2>
            <table border = "1">
               <tr bgcolor = "#9acd32">
                  <th>Roll No</th>
                  <th>First Name</th>
                  <th>Last Name</th>
                  <th>Nick Name</th>
                  <th>Marks</th>
               </tr>

               <xsl:for-each select = "class/student">
                  <tr>
                     <td><xsl:value-of select = "@rollno"/></td>
                     <td><xsl:value-of select = "firstname"/></td>
                     <td><xsl:value-of select = "lastname"/></td>
                     <td><xsl:value-of select = "nickname"/></td>
                     <td><xsl:value-of select = "marks"/></td>
                  </tr>
               </xsl:for-each>
            </table>
         </body>
      </html>
   </xsl:template>
</xsl:stylesheet>

出力

フォーマットされた出力

XSLT <値の>

<xsl:value-of>タグは、選択されたノードの値をXPath式に従ってテキストとして書き込みます。

宣言

以下は、 <xsl:value-of> 要素の構文宣言です。

<xsl:value-of
   select = Expression
   disable-output-escaping = "yes" | "no" >
</xsl:value-of>

属性

Sr.No Name & Description
1

Select

現在のコンテキストで評価されるXPath式。

2

disable-outputescaping

デフォルト-「いいえ」。 「yes」の場合、出力テキストはXML文字をテキストからエスケープしません。

要素

Number of Occurrences Unlimited
Parent elements xsl:attribute, xsl:comment, xsl:copy, xsl:element, xsl:fallback, xsl:for-each, xsl:if, xsl:message, xsl:otherwise, xsl:param, xsl:processing instruction, xsl:template, xsl:variable, xsl:when, xsl:with-param, output elements
Child elements None

デモ例

この例では、属性 rollno とその子<firstname>、<lastname>、<nickname>、および<marks>を持つ<student>要素のテーブルを作成します。

*students.xml*
<?xml version = "1.0"?>
<?xml-stylesheet type = "text/xsl" href = "students.xsl"?>
<class>
   <student rollno = "393">
      <firstname>Dinkar</firstname>
      <lastname>Kad</lastname>
      <nickname>Dinkar</nickname>
      <marks>85</marks>
   </student>
   <student rollno = "493">
      <firstname>Vaneet</firstname>
      <lastname>Gupta</lastname>
      <nickname>Vinni</nickname>
      <marks>95</marks>
   </student>
   <student rollno = "593">
      <firstname>Jasvir</firstname>
      <lastname>Singh</lastname>
      <nickname>Jazz</nickname>
      <marks>90</marks>
   </student>
</class>
*students.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>
         <body>
            <h2>Students</h2>
            <table border = "1">
               <tr bgcolor = "#9acd32">
                  <th>Roll No</th>
                  <th>First Name</th>
                  <th>Last Name</th>
                  <th>Nick Name</th>
                  <th>Marks</th>
               </tr>

               <xsl:for-each select = "class/student">
                  <tr>
                     <td><xsl:value-of select = "@rollno"/></td>
                     <td><xsl:value-of select = "firstname"/></td>
                     <td><xsl:value-of select = "lastname"/></td>
                     <td><xsl:value-of select = "nickname"/></td>
                     <td><xsl:value-of select = "marks"/></td>
                  </tr>
               </xsl:for-each>

            </table>
         </body>
      </html>
   </xsl:template>
</xsl:stylesheet>

出力を確認する

フォーマットされた出力

XSLT <for-each>

<xsl:for-each>タグは、各ノードにテンプレートを繰り返し適用します。

宣言

以下は <xsl:for-each> 要素の構文宣言です

<xsl:for-each
   select = Expression >
</xsl:for-each>

属性

Sr.No Name & Description
1

Select

反復されるノードのセットを決定するために現在のコンテキストで評価されるXPath式。

要素

Number of Occurrences Unlimited
Parent elements xsl:attribute, xsl:comment, xsl:copy, xsl:element, xsl:fallback, xsl:foreach, xsl:if, xsl:message, xsl:otherwise, xsl:param, xsl:processinginstruction, xsl:template, xsl:variable, xsl:when, xsl:with-param, output elements.
Child elements xsl:apply-imports, xsl:apply-templates, xsl:attribute, xsl:call-template, xsl:choose, xsl:comment, xsl:copy, xsl:copy-of, xsl:element, xsl:fallback, xsl:for-each, xsl:if, xsl:message, xsl:number, xsl:processing-instruction, xsl:sort, xsl:text, xsl:value-of, xsl:variable.

デモ例

この例では、各生徒を反復処理することにより、属性rollnoとその子<firstname>、<lastname> <nickname>および<marks>を持つ<student>要素のテーブルを作成します。

*students.xml*
<?xml version = "1.0"?>
<?xml-stylesheet type = "text/xsl" href = "students.xsl"?>
<class>
   <student rollno = "393">
      <firstname>Dinkar</firstname>
      <lastname>Kad</lastname>
      <nickname>Dinkar</nickname>
      <marks>85</marks>
   </student>
   <student rollno = "493">
      <firstname>Vaneet</firstname>
      <lastname>Gupta</lastname>
      <nickname>Vinni</nickname>
      <marks>95</marks>
   </student>
   <student rollno = "593">
      <firstname>Jasvir</firstname>
      <lastname>Singh</lastname>
      <nickname>Jazz</nickname>
      <marks>90</marks>
   </student>
</class>
*students.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>
         <body>
            <h2>Students</h2>
            <table border = "1">
               <tr bgcolor = "#9acd32">
                  <th>Roll No</th>
                  <th>First Name</th>
                  <th>Last Name</th>
                  <th>Nick Name</th>
                  <th>Marks</th>
               </tr>

               <xsl:for-each select = "class/student">

                  <tr>
                     <td><xsl:value-of select = "@rollno"/></td>
                     <td><xsl:value-of select = "firstname"/></td>
                     <td><xsl:value-of select = "lastname"/></td>
                     <td><xsl:value-of select = "nickname"/></td>
                     <td><xsl:value-of select = "marks"/></td>
                  </tr>
               </xsl:for-each>

            </table>
         </body>
      </html>
   </xsl:template>
</xsl:stylesheet>

出力

フォーマットされた出力

XSLT <並べ替え>

<xsl:sort>タグは、ノードのソート基準を指定します。

宣言

次に、 <xsl:sort> 要素の構文宣言を示します。

<xsl:sort
   select = string-expression
   lang = { nmtoken }
   data-type = { "text" | "number" | QName }
   order = { "ascending" | "descending" }
   case-order = { "upper-first" | "lower-first" } >
</xsl:sort>

属性

Sr.No Name & Description
1

select

ノードのソートキー。

2

lang

ソート順を決定するために使用される言語アルファベット。

3

data-type

テキストのデータ型。

4

order

ソート順。 デフォルトは「昇順」です。

5

case-order

大文字による文字列のソート順。 デフォルトは「アッパーファースト」です。

要素

Number of occurrences Unlimited
Parent elements xsl:apply-templates, xsl:for-each
Child elements None

デモ例

この例では、属性 rollno とその子<firstname>、<lastname>、<nickname>、および<marks>を備えた<student>要素のテーブルを作成し、各生徒を名前でソートします。

*students.xml*
<?xml version = "1.0"?>
<?xml-stylesheet type = "text/xsl" href = "students.xsl"?>
<class>
   <student rollno = "393">
      <firstname>Dinkar</firstname>
      <lastname>Kad</lastname>
      <nickname>Dinkar</nickname>
      <marks>85</marks>
   </student>
   <student rollno = "493">
      <firstname>Vaneet</firstname>
      <lastname>Gupta</lastname>
      <nickname>Vinni</nickname>
      <marks>95</marks>
   </student>
   <student rollno = "593">
      <firstname>Jasvir</firstname>
      <lastname>Singh</lastname>
      <nickname>Jazz</nickname>
      <marks>90</marks>
   </student>
</class>
*students.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>
         <body>
            <h2>Students</h2>
            <table border = "1">
               <tr bgcolor = "#9acd32">
                  <th>Roll No</th>
                  <th>First Name</th>
                  <th>Last Name</th>
                  <th>Nick Name</th>
                  <th>Marks</th>
               </tr>

               <xsl:for-each select = "class/student">

                  <xsl:sort select = "firstname"/>
                  <tr>
                     <td><xsl:value-of select = "@rollno"/></td>
                     <td><xsl:value-of select = "firstname"/></td>
                     <td><xsl:value-of select = "lastname"/></td>
                     <td><xsl:value-of select = "nickname"/></td>
                     <td><xsl:value-of select = "marks"/></td>
                  </tr>
               </xsl:for-each>
            </table>
         </body>
      </html>
   </xsl:template>
</xsl:stylesheet>

出力

フォーマットされたソート出力

XSLT <if>

<xsl:if>タグは、ノードのコンテンツに対する条件付きテストを指定します。

宣言

以下は、 <xsl:if> 要素の構文宣言です。

<xsl:if
  test = boolean-expression >
</xsl:if>

属性

Sr.No Name & Description
1

test

テストするxmlデータの条件。

要素

Number of Occurrences Unlimited
Parent elements xsl:attribute, xsl:comment, xsl:copy, xsl:element, xsl:fallback, xsl:for-each, xsl:if, xsl:message, xsl:otherwise, xsl:param, xsl:processing-instruction, xsl:template, xsl:variable, xsl:when, xsl:with-param, output elements
Child elements xsl:apply-templates, xsl:attribute, xsl:call-template, xsl:choose, xsl:comment, xsl:copy, xsl:copy-of, xsl:element, xsl:for-each, xsl:if, xsl:processing-instruction, xsl:text, xsl:value-of, xsl:variable, output elements

デモ例

この例では、各生徒を反復処理して、属性 rollno とその子<firstname>、<lastname>、<nickname>、および<marks>を使用して<student>要素のテーブルを作成します。 90以上のマークをチェックし、学生の詳細を印刷します。

*students.xml*
<?xml version = "1.0"?>
<?xml-stylesheet type = "text/xsl" href = "students.xsl"?>
<class>
   <student rollno = "393">
      <firstname>Dinkar</firstname>
      <lastname>Kad</lastname>
      <nickname>Dinkar</nickname>
      <marks>85</marks>
   </student>
   <student rollno = "493">
      <firstname>Vaneet</firstname>
      <lastname>Gupta</lastname>
      <nickname>Vinni</nickname>
      <marks>95</marks>
   </student>
   <student rollno = "593">
      <firstname>Jasvir</firstname>
      <lastname>Singh</lastname>
      <nickname>Jazz</nickname>
      <marks>90</marks>
   </student>
</class>
*students.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>
         <body>
            <h2>Students</h2>
            <table border = "1">
               <tr bgcolor = "#9acd32">
                  <th>Roll No</th>
                  <th>First Name</th>
                  <th>Last Name</th>
                  <th>Nick Name</th>
                  <th>Marks</th>
               </tr>

               <xsl:for-each select = "class/student">

                  <xsl:if test = "marks > 90">
                     <tr>
                        <td><xsl:value-of select = "@rollno"/></td>
                        <td><xsl:value-of select = "firstname"/></td>
                        <td><xsl:value-of select = "lastname"/></td>
                        <td><xsl:value-of select = "nickname"/></td>
                        <td><xsl:value-of select = "marks"/></td>
                     </tr>
                  </xsl:if>
               </xsl:for-each>

            </table>
         </body>
      </html>
   </xsl:template>
</xsl:stylesheet>

出力

フォーマットされたIF出力

XSLT <選択>

<xsl:choose>タグは、<xsl:otherwise>および<xsl:when>要素とともにノードのコンテンツに対する複数の条件付きテストを指定します。

宣言

以下は、 <xsl:choose> 要素の構文宣言です。

<xsl:choose >
</xsl:choose>

要素

Number of Occurrences Unlimited
Parent elements xsl:attribute, xsl:comment, xsl:copy, xsl:element, xsl:fallback, xsl:for-each, xsl:if, xsl:message, xsl:otherwise, xsl:param, xsl:processing-instruction, xsl:template, xsl:variable, xsl:when, xsl:with-param, output elements
Child elements xsl:otherwise, xsl:when

デモ例

この例では、各生徒を反復処理して、属性 rollno とその子<firstname>、<lastname>、<nickname>、および<marks>を使用して<student>要素のテーブルを作成します。 グレードの詳細を確認してから印刷します。

*students.xml*
<?xml version = "1.0"?>
<?xml-stylesheet type = "text/xsl" href = "students.xsl"?>
<class>
   <student rollno = "393">
      <firstname>Dinkar</firstname>
      <lastname>Kad</lastname>
      <nickname>Dinkar</nickname>
      <marks>85</marks>
   </student>
   <student rollno = "493">
      <firstname>Vaneet</firstname>
      <lastname>Gupta</lastname>
      <nickname>Vinni</nickname>
      <marks>95</marks>
   </student>
   <student rollno = "593">
      <firstname>Jasvir</firstname>
      <lastname>Singh</lastname>
      <nickname>Jazz</nickname>
      <marks>90</marks>
   </student>
</class>
*students.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>
         <body>
            <h2>Students</h2>
            <table border = "1">
               <tr bgcolor = "#9acd32">
                  <th>Roll No</th>
                  <th>First Name</th>
                  <th>Last Name</th>
                  <th>Nick Name</th>
                  <th>Marks</th>
                  <th>Grade</th>
               </tr>

               <xsl:for-each select = "class/student">

                  <tr>
                     <td><xsl:value-of select = "@rollno"/></td>
                     <td><xsl:value-of select = "firstname"/></td>
                     <td><xsl:value-of select = "lastname"/></td>
                     <td><xsl:value-of select = "nickname"/></td>
                     <td><xsl:value-of select = "marks"/></td>

                     <td>
                        <xsl:choose>
                           <xsl:when test = "marks > 90">
                              High
                           </xsl:when>

                           <xsl:when test = "marks > 85">
                              Medium
                           </xsl:when>

                           <xsl:otherwise>
                              Low
                           </xsl:otherwise>
                        </xsl:choose>
                     </td>
                  </tr>
               </xsl:for-each>
            </table>
         </body>
      </html>
   </xsl:template>
</xsl:stylesheet>

出力

フォーマット済み出力の選択

XSLT <キー>

<xsl:key>タグ要素​​は、XMLドキュメント内の特定の要素に割り当てられた名前付きの名前と値のペアを指定します。 このキーは、XMLドキュメント内の割り当てられた要素にアクセスするために、XPath式のkey()関数で使用されます。

宣言

以下は、 <xsl:key> 要素の構文宣言です。

<xsl:key
   name = QName
   match = Pattern
   use = Expression >
</xsl:key>

属性

S.No Name & Description
1

Name

使用するキーの名前。

2

Match

このキーを保持するノードを識別するために使用されるパターン。

3

Use

XMLドキュメントのノードの値を識別するXPath式。

要素

Number of Occurrences Unlimited
Parent elements xsl:stylesheet
Child elements None

デモ例

この例では、各生徒を反復処理して、属性 rollno とその子<firstname>、<lastname>、<nickname>、および<marks>を使用して<student>要素のテーブルを作成します。 キーを名としてチェックして、学生の名前の1つとし、学生の詳細を出力します。

*students.xml*
<?xml version = "1.0"?>
<?xml-stylesheet type = "text/xsl" href = "students.xsl"?>
<class>
   <student rollno = "393">
      <firstname>Dinkar</firstname>
      <lastname>Kad</lastname>
      <nickname>Dinkar</nickname>
      <marks>85</marks>
   </student>
   <student rollno = "493">
      <firstname>Vaneet</firstname>
      <lastname>Gupta</lastname>
      <nickname>Vinni</nickname>
      <marks>95</marks>
   </student>
   <student rollno = "593">
      <firstname>Jasvir</firstname>
      <lastname>Singh</lastname>
      <nickname>Jazz</nickname>
      <marks>90</marks>
   </student>
</class>
*students.xsl*
<xsl:stylesheet version = "1.0"
   xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">
   <xsl:key name = "firstname-search" match = "student" use = "firstname"/>
   <xsl:template match = "/">
      <html>
         <body>
            <h2>Students</h2>
            <table border = "1">
               <tr bgcolor = "#9acd32">
                  <th>Roll No</th>
                  <th>First Name</th>
                  <th>Last Name</th>
                  <th>Nick Name</th>
                  <th>Marks</th>
               </tr>

               <xsl:for-each select = "key('firstname-search', 'Dinkar')">

                  <tr>
                     <td><xsl:value-of select = "@rollno"/></td>
                     <td><xsl:value-of select = "firstname"/></td>
                     <td><xsl:value-of select = "lastname"/></td>
                     <td><xsl:value-of select = "nickname"/></td>
                     <td><xsl:value-of select = "marks"/></td>
                  </tr>

               </xsl:for-each>
            </table>
         </body>
      </html>
   </xsl:template>
</xsl:stylesheet>

出力

フォーマットされたキー出力

XSLT <メッセージ>

<message>タグ要素​​は、XSLT処理のデバッグに役立ちます。 javascriptアラートに似ています。 <xsl:>タグは、処理を終了し、エラーメッセージを表示するために呼び出し元アプリケーションにメッセージを送信するXSLTプロセッサへのメッセージをバッファします。

宣言

以下は、 <xsl:message> 要素の構文宣言です。

<xsl:message
   terminate = "yes" | "no" >
</xsl:message>

属性

Sr.No Name & Description
1

terminate

この命令の実行時に変換を終了するかどうかを指定します。 デフォルトは「yes」です。

要素

Number of Occurrences Unlimited
Parent elements xsl:attribute, xsl:comment, xsl:copy, xsl:element, xsl:fallback, xsl:foreach, xsl:if, xsl:message, xsl:otherwise, xsl:param, xsl:processinginstruction, xsl:template, xsl:variable, xsl:when, xsl:with-param, output elements
Child elements xsl:apply-templates, xsl:attribute, xsl:call-template, xsl:choose, xsl:comment, xsl:copy, xsl:copy-of, xsl:element, xsl:for-each, xsl:if, xsl:processing-instruction, xsl:text, xsl:value-of, xsl:variable, output elements

デモ例

この例では、各生徒を反復処理して、属性 rollno とその子<firstname>、<lastname>、<nickname>、および<marks>を使用して<student>要素のテーブルを作成します。 キーが存在するファーストネームとしてチェックし、学生の詳細を印刷します。そうでない場合はエラーメッセージを表示します。

*students.xml*
<?xml version = "1.0"?>
<?xml-stylesheet type = "text/xsl" href = "students.xsl"?>
<class>
   <student rollno = "393">
      <firstname>Dinkar</firstname>
      <lastname>Kad</lastname>
      <nickname>Dinkar</nickname>
      <marks>85</marks>
   </student>
   <student rollno = "493">
      <firstname></firstname>
      <lastname>Gupta</lastname>
      <nickname>Vinni</nickname>
      <marks>95</marks>
   </student>
   <student rollno = "593">
      <firstname>Jasvir</firstname>
      <lastname>Singh</lastname>
      <nickname>Jazz</nickname>
      <marks>90</marks>
   </student>
</class>
*students.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>
         <body>
            <h2>Students</h2>
            <table border = "1">
               <tr bgcolor = "#9acd32">
                  <th>Roll No</th>
                  <th>First Name</th>
                  <th>Last Name</th>
                  <th>Nick Name</th>
                  <th>Marks</th>
               </tr>

               <xsl:for-each select = "class/student">

                  <xsl:if test = "firstname = ''">
                     <xsl:message terminate = "yes">A first name field is empty.
                     </xsl:message>
                  </xsl:if>

                  <tr>
                     <td><xsl:value-of select = "@rollno"/></td>
                     <td><xsl:value-of select = "firstname"/></td>
                     <td><xsl:value-of select = "lastname"/></td>
                     <td><xsl:value-of select = "nickname"/></td>
                     <td><xsl:value-of select = "marks"/></td>
                  </tr>
               </xsl:for-each>
            </table>
         </body>
      </html>
   </xsl:template>
</xsl:stylesheet>

出力

フォーマットされたメッセージ出力

XSLT <apply-template>

<xsl:apply-template>タグは、選択した各ノードのタイプとコンテキストに基づいて、適用する適切なテンプレートを見つけるようにXSLTプロセッサに通知します。

宣言

以下は、 <xsl:apply-template> 要素の構文宣言です。

<xsl:apply-template
   select = Expression
   mode = QName >
</xsl:apply-template>

属性

Sr.No Name & Description
1

select

すべての子を処理する代わりに、XPath式によって選択されたノードを処理するために使用されます。

2

mode

修飾名で指定された要素を複数回処理でき、そのたびに異なる結果が生成されます。

要素

Number of occurrences Unlimited
Parent elements xsl:attribute, xsl:comment, xsl:copy, xsl:element, xsl:fallback, xsl:foreach, xsl:if, xsl:message, xsl:otherwise, xsl:param, xsl:processinginstruction, xsl:template, xsl:variable, xsl:when, xsl:with-param, output elements
Child elements xsl:sort, xsl:with-param

デモ例

この例では、各生徒を反復処理して、属性 rollno とその子<firstname>、<lastname>、<nickname>、および<marks>を使用して<student>要素のリストを作成します。

*students.xml*
<?xml version = "1.0"?>
<?xml-stylesheet type = "text/xsl" href = "students.xsl"?>
<class>
   <student rollno = "393">
      <firstname>Dinkar</firstname>
      <lastname>Kad</lastname>
      <nickname>Dinkar</nickname>
      <marks>85</marks>
   </student>
   <student rollno = "493">
      <firstname>Vaneet</firstname>
      <lastname>Gupta</lastname>
      <nickname>Vinni</nickname>
      <marks>95</marks>
   </student>
   <student rollno = "593">
      <firstname>Jasvir</firstname>
      <lastname>Singh</lastname>
      <nickname>Jazz</nickname>
      <marks>90</marks>
   </student>
</class>
*students.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>
         <body>
            <h2>Students</h2>
            <xsl:apply-templates select = "class/student"/>
         </body>
      </html>
   </xsl:template>

   <xsl:template match = "class/student">
      <xsl:apply-templates select = "@rollno"/>
      <xsl:apply-templates select = "firstname"/>
      <xsl:apply-templates select = "lastname"/>
      <xsl:apply-templates select = "nickname"/>
      <xsl:apply-templates select = "marks"/>
      <br/>
   </xsl:template>

   <xsl:template match = "@rollno">
      <span style = "font-size = 22px;">
         <xsl:value-of select = "."/>
      </span>
      <br/>
   </xsl:template>

   <xsl:template match = "firstname">
      First Name:<span style = "color:blue;">
         <xsl:value-of select = "."/>
      </span>
      <br/>
   </xsl:template>

   <xsl:template match = "lastname">
      Last Name:<span style = "color:green;">
         <xsl:value-of select = "."/>
      </span>
      <br/>
   </xsl:template>

   <xsl:template match = "nickname">
      Nick Name:<span style = "color:red;">
         <xsl:value-of select = "."/>
      </span>
      <br/>
   </xsl:template>

   <xsl:template match = "marks">
      Marks:<span style = "color:gray;">
         <xsl:value-of select = "."/>
      </span>
      <br/>
   </xsl:template>

</xsl:stylesheet>

出力

フォーマットされた適用テンプレート出力

XSLT <インポート>

<xsl:import>タグは、あるスタイルシートの内容を別のスタイルシートにインポートします。 スタイルシートのインポートは、インポートされたスタイルシートよりも優先されます。

宣言

以下は、 <xsl:import> 要素の構文宣言です。

<xsl:import href = "uri">
</xsl:import>

属性

Sr.No Name & Description
1.

href

インポートされるxsltスタイルシートのパスを渡すために使用されます

.

要素

Number of occurrences Unlimited
Parent elements xsl:stylesheet, xsl:transform
Child elements none

デモ例

この例では、各生徒を反復処理して、属性 rollno とその子<firstname>、<lastname>、<nickname>、および<marks>を使用して<student>要素のリストを作成します。 ここでは、students_imports.xslスタイルシートがstudents.xslをインポートし、students.xmlがstudents_imports.xslにリンクされている2つのxslスタイルシートを作成しました。

*students.xml*
<?xml version = "1.0"?>
<?xml-stylesheet type = "text/xsl" href = "students_imports.xsl"?>
<class>
   <student rollno = "393">
      <firstname>Dinkar</firstname>
      <lastname>Kad</lastname>
      <nickname>Dinkar</nickname>
      <marks>85</marks>
   </student>
   <student rollno = "493">
      <firstname>Vaneet</firstname>
      <lastname>Gupta</lastname>
      <nickname>Vinni</nickname>
      <marks>95</marks>
   </student>
   <student rollno = "593">
      <firstname>Jasvir</firstname>
      <lastname>Singh</lastname>
      <nickname>Jazz</nickname>
      <marks>90</marks>
   </student>
</class>
*students.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>
         <body>
            <h2>Students</h2>
            <table border = "1">
               <tr bgcolor = "#9acd32">
                  <th>Roll No</th>
                  <th>First Name</th>
                  <th>Last Name</th>
                  <th>Nick Name</th>
                  <th>Marks</th>
               </tr>

               <xsl:for-each select = "class/student">

                  <tr>
                     <td><xsl:value-of select = "@rollno"/></td>
                     <td><xsl:value-of select = "firstname"/></td>
                     <td><xsl:value-of select = "lastname"/></td>
                     <td><xsl:value-of select = "nickname"/></td>
                     <td><xsl:value-of select = "marks"/></td>
                  </tr>
               </xsl:for-each>
            </table>
         </body>
      </html>
   </xsl:template>
</xsl:stylesheet>
*students_imports.xsl*
<?xml version = "1.0" encoding = "UTF-8"?>
<xsl:stylesheet version = "1.0"
   xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">
   <xsl:import href = "students.xsl"/>
   <xsl:template match = "/">
      <xsl:apply-imports/>
   </xsl:template>
</xsl:stylesheet>

出力

フォーマットされたインポートテンプレート出力