1. ホーム
  2. Web制作
  3. XML/XSLT

リーンXSL

2022-02-06 02:53:17

関連記事 XMLとは
XSL(EXtensible Stylesheet Language)とは、拡張可能なスタイルシート言語のことである。XSLは、HTMLにとってのCSSのようなもので、わかりやすく言うと、XMLのデータを指定された表示形式で出力することです。
XSLT - XML文書を変換するために使用される言語。XSLTとは、XSL Transformationのことです。 XPath - XML ドキュメント内を移動するために使用される言語
XSL 構文 XSL文書の最初の行は、実際にはXML宣言です。
<?xml version="1.0" encoding="GB2312"? >
XSLとXML? は同じ構文規則に従います。
XML宣言の後に、XSL宣言が来る。
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
......
</xsl:stylesheet>
XSL宣言には終了タグが必要で、上記の宣言には名前空間とXSL仕様のバージョンも含まれています。
名前空間とは
特定の文書で使用できる要素名と属性名のセットを指定するものです。名前空間の目的は、名前の衝突を避けることである。XMLやその他のXML関連言語はユーザー定義であるため、名前の衝突が起こることがあります。 <table> は、レイアウトやシートを指すことがあります。多くのアプリケーションでは、複数のXML文書を同時に扱うため、異なるXML文書が混在し、ある要素がそれらの文書で異なる意味を表す場合がよくあります。複数の文書に同じ名前空間を使用することで、各文書で要素が同じ意味を表すことが保証されます。そうでない場合は、要素が異なる意味を表すように、異なる名前空間を使用する必要があります。
名前空間は、文書宣言の xmlns 属性で指定します。この属性は、実際にはサイトのアドレスです(例:http://www.w3.org/1999/XSL/Transform)。その根拠は、URIは一意であり、したがって対応する名前空間も一意であることです。文書宣言の URI は、名前としてのみ使用されます。
テンプレートまたはルール
XSL文書は、テンプレートまたはルールで構成され、それぞれが特定のXMLノードに適用されるルールを定義しています。
<xsl:template match="/"> ......</xsl:template> テンプレートの役割は、XML文書のデータを運ぶために使われます。金型のように、金型が四角であれば、その金型で作られるモデルも四角でなければならず、XML文書のデータは、金型を本当に埋めるために使われる原材料となります。実際には、テンプレートの中にサブテンプレートをネストすることができますが、最上位のテンプレートにはマッチを "/" に設定する必要があります。
happyold.xml
<?xml version="1.0" encoding="GB2312"? >
<club>
会員登録
<名前>cnbruce </name>
<Age>10 </Age>
性別>男性 </gender>
<Description> 彼はひどい奴だ! </description>
</member>
<メンバー>
<名前>yufuzi</name>
<age>80 </age>
性別>男性 </gender>
<Description> 彼は素晴らしい人です! </description>
</member>
<メンバー>
<名前>xiaojin</名前>
<age>20 </age>
性別>男性 </gender>
<Description> 彼は性格に問題がある! </description>
</member>
</Club>
ループ構造
<xsl:for-each select="... ">...... </xsl:for-each> 典型的なforループと同じように動作します。
old.xsl
<?xml version="1.0" encoding="GB2312"? >
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<table border="1">
<tr>
<th>Name</th>
<th>Age</th>
<th>gender</th>
<th>Description</th>
</tr>
<xsl:for-each select="Clubs/Members">
<tr>
<! -- 式は親ノードを含むことや、ドキュメントルートから始まることは要求されません。これは、これらの要素のパスは <xsl:for-each> 構文内の XPath 式に基づいて計算されるからです -->
<td><xsl:value-of select="name"/></td>
<td><xsl:value-of select="Age"/></td>
<td><xsl:value-of select="gender"/></td>
<td><xsl:value-of select="Description"/></td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
old.xslをhappyold.xmlと同じフォルダーに置き、happyold.xmlの2行目を
<?xml-stylesheet type="text/xsl" href="old.xsl"? > 次に、ブラウザで表示結果をプレビューします。
ループ構造を使用すると、条件に基づいて出力をフィルタリングすることもできます。例えば、30歳以上のメンバーだけを表示させたいとします。
old30.xsl
<?xml version="1.0" encoding="GB2312"? >
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<table border="1">
<tr>
<th>Name</th>
<th>Age</th>
<th>gender</th>
<th>Description</th>
</tr>
<xsl:for-each select="クラブ/会員 [年齢>30]">
<tr>
<td><xsl:value-of select="Name"/></td>。
<td><xsl:value-of select="Age"/></td>
<td><xsl:value-of select="gender"/></td>
<td><xsl:value-of select="description"/></td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
XMLノードの条件を定義するには、以下のいずれかの演算子を使用することができます。
はイコール(=)である
とは一致しない(!=)。
より小さい (<)
以下 (<=)
より大きい (>)
よりも大きいか等しい (>=)
<xsl:sort / >構成を使って、指定されたノードで出力をソートさせます。 <xsl:sort / >要素は、アプリケーションがすべての項目をループできるように、 <xsl:for-each >要素の中に入れ子にしなければなりません。 sort要素は対応する終了タグを持っていないので、それらの最後に >/; を加えて自己終端にする。
old_sort.xsl
<?xml version="1.0" encoding="GB2312"? >
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<table border="1">
<tr>
<th>Name</th>
<th>Age</th>
<th>gender</th>
<th>Description</th>
</tr>
<xsl:for-each select="Clubs/Members">
<xsl:sort select="年齢" order="降順" />
<tr>
<td><xsl:value-of select="Name"/></td>。
<td><xsl:value-of select="Age"/></td>
<td><xsl:value-of select="gender"/></td>
<td><xsl:value-of select="Description"/></td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
order="descending" を削除して、表示結果を見てみましょう。
条件構文。
<xsl:choose>
<xsl:when test="式">
</xsl:when>
<xsl:otherwise>
</xsl:otherwise>
</xsl:choose>
条件構成の中に複数のwhenがあってもよいが、それ以外では、最初のテスト条件に含まれない他のすべてのケースを処理するために、1つだけである。
old_choose.xsl
<?xml version="1.0" encoding="GB2312"? >
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<table border="1">
<tr>
<th>Name</th>
<th>Age</th>
<th>gender</th>
<th>Description</th>
</tr>
<xsl:for-each select="Clubs/Members">
<xsl:choose>
<xsl:when test="年齢 > 70">
<tr bgcolor="#66CCFF">
<td><xsl:value-of select="Name"/></td>。
<td><xsl:value-of select="Age"/></td>
<td><xsl:value-of select="gender"/></td>
<td><xsl:value-of select="説明"/></td>
</tr>
</xsl:when>
<xsl:when test="年齢=10">
<tr bgcolor="blue">
<td><xsl:value-of select="name"/></td>。
<td><xsl:value-of select="Age"/></td>
<td><xsl:value-of select="gender"/></td>
<td><xsl:value-of select="Description"/></td>
</tr>
</xsl:when>
<xsl:otherwise>
<tr bgcolor="red">
<td><xsl:value-of select="name"/></td>。
<td><xsl:value-of select="Age"/></td>
<td><xsl:value-of select="gender"/></td>
<td><xsl:value-of select="Description"/></td>
</tr>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>