ホームページ  >  記事  >  バックエンド開発  >  クレイジーXML学習記(11) -----------XSLT解説

クレイジーXML学習記(11) -----------XSLT解説

黄舟
黄舟オリジナル
2017-02-21 14:44:501345ブラウズ


XML の基礎知識については以前に整理しましたので、興味のある方は次の URL をご覧ください

http://www.php.cn/

記事内の写真や文章の表示に誤りがあり表示できませんのでご了承ください!

確認したい場合は、w3cshool API ドキュメントをダウンロードできます

Connect http://www.php.cn/Download

XSLT XSL で始まり、で終わりますXSLT、XPath、および XSL-FO。

XPathについては後ほど詳しく説明します

XSLから始まります

uage)。 World Wide Web Consortium (W3C) は、XML ベースのスタイルシート言語の必要性があったため、XSL の開発を開始しました。 CSS = HTML スタイルシート

HTML は定義済みのタグを使用しており、タグの意味

は理解しやすいです

HTML 要素の f5d188ed2c074f8b944552db028f98a1 要素はテーブルを定義し、ブラウザはそれを

表示する方法

を認識します。 HTML 要素にスタイルを追加するのは簡単です。 CSS を使用すると、要素を特定のフォントまたは色で表示するようにブラウザーに指示するのが簡単です。

XSL = XML スタイルシート

XML は事前定義されたタグを使用しません (任意のタグ名を使用できます)。また、これらのタグの意味

は必ずしも理解するのが簡単ではありません

f5d188ed2c074f8b944552db028f98a1 要素は HTML テーブル、家具、またはその他のものを意味します。ブラウザーはそれを表示する方法を

知りません

XSL は XML ドキュメントを表示する方法を

説明

することができます! XSL - 単なるスタイルシート言語ではありません

XSL は 3 つの部分で構成されています:

XSLT

    XML ドキュメントを変換するための言語。
  • XPath
  • XML ドキュメント内を移動するための言語。
  • XSL-FO
  • XMLドキュメントをフォーマットするための言語。

XSLT は、XML ドキュメントを XHTML ドキュメントまたは他の XML ドキュメントに変換するために使用される言語です。


XPath は、XML ドキュメント内を移動するための言語です。

学習する前に知っておく必要がある基本的な知識:

学習を続ける前に、次の知識の基本を理解しておく必要があります:

HTML / XHTML

    XML / XML 名前空間
  • XPath
  • これらのプロジェクトを最初に学びたい場合は、私たちのをチェックしてください。 これらのチュートリアルにアクセスするためのホームページ。
  • XSLTとは何ですか?

XSLT は XSL 変換を指します。

    XSLT は XSL の最も重要な部分です。
  • XSLT は、1 つの XML ドキュメントを別の XML ドキュメントに変換できます。
  • XSLT は XPath を使用して XML ドキュメント内を移動します。
  • XPath は W3C 標準です。
  • XSLT = XSL変換

XSLTはXSLの最も重要な部分です。

XSLT は、1 つの XML ドキュメントを別の XML ドキュメント、または HTML や XHTML などのブラウザで認識できる他の種類のドキュメントに変換するために使用されます。通常、XSLT は、各 XML 要素を (X)HTML 要素に変換することによってこれを行います。

XSLT を使用すると、出力ファイルに要素や属性を追加したり、出力ファイルから要素や属性を削除したりできます。また、要素を再配置したり、テストを実行して、どの要素を非表示にするか表示するかを決定したりすることもできます。

変換プロセスを記述する一般的な方法は、

XSLT が XML ソース ツリーを XML 結果ツリー

に変換するというものです。

XSLTはXPathを使用します

XSLTはXPathを使用してXMLドキュメント内の情報を検索します。 XPath は、要素と属性を通じて XML ドキュメント内を移動するために使用されます。

まず XPath について学びたい場合は、こちらにアクセスしてください。 XPath チュートリアル。

それはどのように機能しますか?

変換プロセス中、XSLT は XPath を使用して、1 つ以上の事前定義されたテンプレートに一致するソース文書の部分を定義します。一致するものが見つかると、XSLT はソース文書の一致する部分を結果文書に変換します。

正しいスタイル シート宣言

は、ルート要素が 8bfba33610b8df90976a82ef1f8b7575 または 531584125f9072736f72fc92cb1ce734 として宣言されます。

注: 8bfba33610b8df90976a82ef1f8b7575 と 531584125f9072736f72fc92cb1ce734 は両方とも使用できます。

W3C の XSLT 標準によると、XSL スタイル シートを宣言する正しい方法は次のとおりです:

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

または:

<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

XSLT 要素、属性、および特性にアクセスするには、それらを宣言する必要があります。ドキュメントの先頭 XSLT 名前空間。

xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 指向了官方的 W3C XSLT 命名空间。如果您使用此命名空间,就必须包含属性 version="1.0"。

从一个原始的 XML 文档开始

我们现在要把下面这个 XML 文档("cdcatalog.xml")转换为 XHTML:

<?xml version="1.0" encoding="ISO-8859-1"?>
<catalog>
  <cd>
    <title>Empire Burlesque</title>
    <artist>Bob Dylan</artist>
    <country>USA</country>
    <company>Columbia</company>
    <price>10.90</price>
    <year>1985</year>
  </cd>
.
.
.
</catalog>

在 Internet Explorer 和 Firefox 中查看 XML 文件:

打开 XML 文件(通常通过点击某个链接) - XML 文档会以颜色化的代码方式来显示根元素及子元素。点击元素左侧的加号或减号可展开或收缩元素的结构。如需查看原始的XML源文件(不带有加号和减号),请在浏览器菜单中选择“查看页面源代码”。

在 Netscape 6 中查看 XML 文件:

打开 XML 文件,然后在 XML 文件中右击,并选择“查看页面源代码”。XML文档会以颜色化的代码方式来显示根元素及子元素。

在 Opera 7 中查看 XML 文件:

打开 XML 文件,然后在XML文件中右击,选择“框架”/“查看源代码”。XML文档将显示为纯文本。

 

创建 XSL 样式表

然后创建一个带有转换模板的 XSL 样式表("cdcatalog.xsl"):

<?xml version="1.0" encoding="ISO-8859-1"?>

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


  
  
    

My CD Collection

Title Artist

 

把 XSL 样式表链接到 XML 文档

向 XML 文档("cdcatalog.xml")添加 XSL 样式表引用:

<?xml version="1.0" encoding="ISO-8859-1"?><?xml-stylesheet type="text/xsl" href="cdcatalog.xsl"?><catalog>
  <cd>
    <title>Empire Burlesque</title>
    <artist>Bob Dylan</artist>
    <country>USA</country>
    <company>Columbia</company>
    <price>10.90</price>
    <year>1985</year>
  </cd>
.
.
.
</catalog>

 

 

2032d1f3e843089f381a035edc734156 元素

2032d1f3e843089f381a035edc734156 元素用于构建模板。

match 属性用于关联 XML 元素和模板。match 属性也可用来为整个文档定义模板。match 属性的值是 XPath 表达式(举例,match="/" 定义整个文档)。

好了,让我们看一下上一节中的 XSL 文件的简化版本:

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

<xsl:template match="/">
 <html>
 <body>
   <h2>My CD Collection</h2>
   <table border="1">
     <tr bgcolor="#9acd32">
       <th>Title</th>
       <th>Artist</th>
     </tr>
     <tr>
       <td>.</td>
       <td>.</td>
     </tr>
   </table>
 </body>
 </html>
</xsl:template>

</xsl:stylesheet>

代码解释:

由于 XSL 样式表本身也是一个 XML 文档,因此它总是由 XML 声明起始:

<?xml version="1.0" encoding="ISO-8859-1"?>

下一个元素,8bfba33610b8df90976a82ef1f8b7575,定义此文档是一个 XSLT 样式表文档(连同版本号和 XSLT 命名空间属性)。

2032d1f3e843089f381a035edc734156 元素定义了一个模板。而 match="/" 属性则把此模板与 XML 源文档的根相联系。

2032d1f3e843089f381a035edc734156 元素内部的内容定义了写到输出结果的 HTML 代码。

最后两行定义了模板的结尾,及样式表的结尾。

以上转换的结果类似这样:

 

 

02b2fbed6ee2fe75988418f1eace8181 元素

02b2fbed6ee2fe75988418f1eace8181 元素用于提取某个选定节点的值,并把值添加到转换的输出流中:

<?xml version="1.0" encoding="ISO-8859-1"?>



 
 
   

My CD Collection

Title Artist

注释:select 属性的值是一个 XPath 表达式。此表达式的工作方式类似于定位某个文件系统,在其中正斜杠可选择子目录。

上面的转换结果类似这样:

 

 

 


431e46b64b4819f2ac967516fbb4b43f 元素

431e46b64b4819f2ac967516fbb4b43f 元素可用于选取指定的节点集中的每个 XML 元素。

<?xml version="1.0" encoding="ISO-8859-1"?>



  
  
    

My CD Collection

Title Artist

注释:select 属性的值是一个 XPath 表达式。此表达式的工作方式类似于定位某个文件系统,在其中正斜杠可选择子目录。

上面的转换结果类似这样:

 

结果过滤

通过在 431e46b64b4819f2ac967516fbb4b43f 元素中添加一个选择属性的判别式,我们也可以过滤从 XML 文件输出的结果。

<xsl:for-each select="catalog/cd[artist=&#39;Bob Dylan&#39;]">

合法的过滤运算符:

  • =  (等于)

  • != (不等于)

  • < (小于)

  • > (大于)

<?xml version="1.0" encoding="ISO-8859-1"?>



 
  
  

My CD Collection

<xsl:for-each select="catalog/cd[artist=&#39;Bob Dylan&#39;]">
Title Artist

上面的转换结果类似这样:

 


f3a7eb5c7af94a622c8698ad8c159369 元素用于对结果进行排序。

在何处放置排序信息

如需对结果进行排序,只要简单地在 XSL 文件中的 431e46b64b4819f2ac967516fbb4b43f 元素内部添加一个 f3a7eb5c7af94a622c8698ad8c159369 元素:

<?xml version="1.0" encoding="ISO-8859-1"?>



  
  
    

My CD Collection

Title Artist

注释:select 属性指示需要排序的 XML 元素。

上面的转换结果类似这样:

 

 

 

 


28d7e7bce771845b11cc99f4b371fb36 元素

如需放置针对 XML 文件内容的条件测试,请向 XSL 文档添加 28d7e7bce771845b11cc99f4b371fb36 元素。

语法

<xsl:if test="expression">
  ...
  ...如果条件成立则输出...
  ...
</xsl:if>

在何处放置 28d7e7bce771845b11cc99f4b371fb36 元素

如需添加有条件的测试,请在 XSL 文件中的 431e46b64b4819f2ac967516fbb4b43f 元素内部添加 28d7e7bce771845b11cc99f4b371fb36 元素:

<?xml version="1.0" encoding="ISO-8859-1"?>


  
  
    

My CD Collection

Title Artist

注释:必选的 test 属性的值包含了需要求值的表达式。

上面的代码仅仅会输出价格高于 10 的 CD 的 title 和 artist 元素。

上面的转换结果类似这样:

 

 

 

 

 


3e08d16b69ca6dceb52122b5e3e896ec 元素

语法

<xsl:choose>
  <xsl:when test="expression">
    ... 输出 ...
  </xsl:when>
  <xsl:otherwise>
    ... 输出 ....
  </xsl:otherwise>
</xsl:choose>

在何处放置选择条件

要插入针对 XML 文件的多重条件测试,请向 XSL 文件添加 3e08d16b69ca6dceb52122b5e3e896ec、1aab2a36c3da35537dba594d8b9f335a 以及 b490e3a477a758f8d417150b585fd42a:

<?xml version="1.0" encoding="ISO-8859-1"?>



  
  
    

My CD Collection

Title Artist

上面的代码会在 CD 的价格高于 10 时向 "Artist" 列添加粉色的背景颜色。

上面的转换结果类似这样:

查看此 XML 文件,查看此 XSL 文件,查看结果。

另一个例子

这是另外一个包含两个 1aab2a36c3da35537dba594d8b9f335a 元素的例子:

<?xml version="1.0" encoding="ISO-8859-1"?>



  
  
    

My CD Collection

Title Artist

上面的代码会在 CD 的价格高于 10 时向 "Artist" 列添加粉色的背景颜色,并在 CD 的价格高于 9 且低于等于 10 时向 "Artist" 列添加灰色的背景颜色。

上面的转换结果类似这样:

 

 

 


58ff327a04da27df4a7ce66c0ce40bdf 元素

58ff327a04da27df4a7ce66c0ce40bdf 元素可把一个模板应用于当前的元素或者当前元素的子节点。

假如我们向 58ff327a04da27df4a7ce66c0ce40bdf 元素添加一个 select 属性,此元素就会仅仅处理与属性值匹配的子元素。我们可以使用 select 属性来规定子节点被处理的顺序。

请看下面的 XSL 样式表:

<?xml version="1.0" encoding="ISO-8859-1"?>





My CD Collection

Title:
Artist:

 

XSLT 元素

如果您需要有关下列元素的更详细的信息,请点击元素列中的链接。

  • N: 表示最早支持此标签的 Netscape 版本

  • IE: 表示最早支持此标签的 Internet Explorer 版本

注释:在 IE 5 中所支持的元素可能出现非标准的行为,这是由于 IE 5 发布于 XSLT 被确立为正式的 W3C 标准之前。

は、複数の条件テストを表すために bb41c5e2afa2e51b56cbbc78bba5590f および 08840e2c213e7be6cb36177580c1b0f8 と組み合わせて使用​​されます。 5.06.0comment 結果ツリーにコメントノードを作成します。 5.06.0copy 現在のノードのバックアップを作成します(子ノードと属性は含まれません)。 5.06.0copy-of 現在のノードのバックアップを作成します (子ノードと属性を含む)。 6.06.010進形式は、format-number() 関数を通じて数値を文字列に変換するときに使用する文字と記号を定義します。 6.0element 出力ドキュメントに要素ノードを作成します。 5.06.0fallback プロセッサが XSLT 要素をサポートしていない場合、実行するフォールバック コードが指定されます。 6.0for-each 指定されたノードセット内の各ノードを走査します。 5.06.0if には、指定された条件が true の場合にのみ適用されるテンプレートが含まれています。 5.06.0importは、あるスタイルシートから別のスタイルシートにコンテンツを流し込むために使用されます。 6.06.0include あるスタイルシートの内容を別のスタイルシートにインクルードします。 6.06.0key 名前付きキーを宣言します。 6.06.0message メッセージを出力に書き込みます (エラー報告用)。 6.06.0namespace-alias スタイルシート内の名前空間を出力内の別の名前空間に置き換えます。 6.0number 現在のノードの整数位置を決定し、数値をフォーマットします。 6.06.0otherwise c88e008ca37f641f1d68866f53b5c0de 要素のデフォルトのアクションを指定します。 5.06.0output 出力ドキュメントの形式を定義します。 6.06.0paramローカルまたはグローバルパラメータを宣言します。 6.06.0preserve-spaceは、空白を保持する要素を定義するために使用されます。 6.06.0processing-instruction 処理命令ノードを生成します。 5.06.0sort 結果を並べ替えます。 6.06.0strip-spaceは、空白文字を削除する必要がある要素を定義します。 6.06.0stylesheetは、スタイルシートのルート要素を定義します。 5.06.0template 指定されたノードが一致した場合に適用されるルール。 5.06.0text スタイルシートを通じてテキストノードを生成します。 5.06.0transformは、スタイルシートのルート要素を定義します。 6.06.0value-of 選択したノードの値を抽出します。 5.06.0variableローカル変数またはグローバル変数を宣言します。 6.06.0whenは、c88e008ca37f641f1d68866f53b5c0de 要素のアクションを指定します。 5.06.0with-paramは、テンプレートに渡す必要があるパラメータの値を指定します。 6.06.0
要素 説明 IE N
apply-imports インポートされたスタイルシートからテンプレートルールを適用します。 6.0
apply-templates 現在の要素または現在の要素の子要素にテンプレートを適用します。 5.0 6.0
attribute 要素に属性を追加します。 5.0 6.0
attribute-set 名前付き属性セットを作成します。 6.0 6.0
call-template 指定されたテンプレートを呼び出します。 6.0 6.0
choose

上記はクレイジーXML学習ノート(11)----------XSLTの内容です。詳細については、PHP中国語に注意してください。ウェブサイト (www.php.cn)!


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。