Xslt-quick-guide
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を使用する利点は次のとおりです-
- プログラミングに依存しません。 変換は別の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>
出力
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>