XSLTとは?XMLデータを自在に変換する強力な言語を徹底解説

プログラミング・IT

Webサイトやシステム開発で、「XMLで書かれたデータをHTMLに変換したい」「同じデータを異なる形式で出力したい」と思ったことはありませんか?

実は、XMLデータを別の形式に変換する専用の言語があるんです。それが今回紹介するXSLT(エックスエスエルティー)という技術になります。

XSLTを使えば、1つのXMLデータから、Webページ用のHTML、印刷用のPDF、他のシステム用のXMLなど、様々な形式を自動生成できます。データと表示を分離できるので、メンテナンスもグッと楽になるんですよ。

この記事では、XSLTの基本から実践的な使い方まで、初心者の方にも分かりやすく解説していきます。


スポンサーリンク

XSLTって何?基本をサクッと理解しよう

XSLT(Extensible Stylesheet Language Transformations)は、日本語に訳すと「拡張可能なスタイルシート言語変換」。簡単に言えば、XMLドキュメントを別の形式に変換するための言語です。

料理のレシピのたとえ

分かりやすく例えると、こんな感じです。

  • XML = 食材のリスト
  • XSLT = 調理レシピ
  • 出力結果 = 完成した料理

同じ食材(XMLデータ)でも、レシピ(XSLTスタイルシート)を変えれば、カレーにも、シチューにも、炒め物にもできますよね。XSLTも同じ原理で、1つのXMLから様々な形式の出力を作り出せるんです。

XSLTでできること

  • XMLをHTMLに変換してWebページを表示
  • XMLを別の構造のXMLに変換
  • XMLからテキストファイルを生成
  • XMLからCSV形式に変換
  • データのフィルタリングや並べ替え

XMLとXSLTの関係

XSLTを理解するには、まずXMLについて知っておく必要があります。

XMLとは?

XML(Extensible Markup Language)は、データを構造化して記述するためのマークアップ言語です。

こんな感じで書きます。

<?xml version="1.0" encoding="UTF-8"?>
<books>
  <book>
    <title>プログラミング入門</title>
    <author>山田太郎</author>
    <price>2800</price>
  </book>
  <book>
    <title>Web開発の基礎</title>
    <author>佐藤花子</author>
    <price>3200</price>
  </book>
</books>

タグで囲まれた階層構造になっているのが特徴です。

XSLTの役割

このXMLデータを、人間が読みやすいHTMLに変換したり、別のシステムが理解できる形式に変換したりするのが、XSLTの仕事なんです。


XSLTの基本構造

XSLTスタイルシート自体も、実はXMLとして書かれています。

最小限のXSLTファイル

<?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>
        <h1>こんにちは、XSLT!</h1>
      </body>
    </html>
  </xsl:template>

</xsl:stylesheet>

重要な要素の説明

xsl:stylesheet
XSLTスタイルシートのルート要素。すべてのXSLT命令はこの中に書きます。

xmlns:xsl
「xsl」というプレフィックス(接頭辞)がXSLT専用の名前空間であることを宣言しています。

xsl:template
変換のルール(テンプレート)を定義します。match属性で、どの部分に適用するかを指定するんです。

match=”/”
XMLドキュメントのルート(一番上)にマッチすることを意味します。


テンプレートベースの処理

XSLTは、テンプレートという単位で変換ルールを定義します。

テンプレートの仕組み

XMLの特定の部分(ノード)にマッチするテンプレートを用意して、それをどう変換するかを記述していきます。

<xsl:template match="book">
  <div class="book">
    <h2><xsl:value-of select="title"/></h2>
    <p>著者: <xsl:value-of select="author"/></p>
    <p>価格: <xsl:value-of select="price"/>円</p>
  </div>
</xsl:template>

このテンプレートは、XMLの<book>要素を見つけると、それをHTMLの<div>に変換します。

xsl:value-of要素

xsl:value-ofは、XMLの要素の中身を取り出して出力する命令です。

select属性に、取り出したい要素のパスを書きます。


XPath:XMLのナビゲーション言語

XSLTでは、XPath(エックスパス)という言語を使って、XMLの特定の部分を指定します。

XPathの基本

パス表記
ファイルシステムのパスのように、スラッシュ(/)で階層を表します。

  • book/title – bookの子要素であるtitle
  • //book – ドキュメント内のすべてのbook要素
  • book[@id='123'] – id属性が’123’のbook要素

便利な記号

  • . – 現在のノード
  • .. – 親ノード
  • @ – 属性を指す

XPathの例

<xsl:value-of select="book/title"/>
<xsl:value-of select="//author"/>
<xsl:value-of select="book[@category='programming']/title"/>

XPathを理解すれば、XMLのどこにでも自由にアクセスできるようになります。


主要なXSLT要素

よく使われるXSLTの命令を紹介します。

xsl:for-each

XMLの複数の要素に対して、繰り返し処理を行います。

<xsl:for-each select="books/book">
  <li>
    <xsl:value-of select="title"/>
  </li>
</xsl:for-each>

これで、すべての本のタイトルがリスト表示されます。

xsl:if

条件に合う場合だけ処理を実行します。

<xsl:if test="price &gt; 3000">
  <span class="expensive">高額書籍</span>
</xsl:if>

XMLの中では、「>」を「>」と書く必要があります(エスケープ処理)。

xsl:choose / xsl:when / xsl:otherwise

複数の条件分岐を行います。プログラミングのif-else文に相当します。

<xsl:choose>
  <xsl:when test="price &lt; 2000">
    <span class="cheap">お手頃価格</span>
  </xsl:when>
  <xsl:when test="price &lt; 4000">
    <span class="normal">標準価格</span>
  </xsl:when>
  <xsl:otherwise>
    <span class="expensive">高額書籍</span>
  </xsl:otherwise>
</xsl:choose>

xsl:sort

データを並べ替えます。

<xsl:for-each select="books/book">
  <xsl:sort select="price" data-type="number" order="ascending"/>
  <li><xsl:value-of select="title"/> - <xsl:value-of select="price"/>円</li>
</xsl:for-each>

価格の安い順に並べ替えられます。

xsl:apply-templates

他のテンプレートを呼び出します。

<xsl:template match="/">
  <html>
    <body>
      <xsl:apply-templates select="books/book"/>
    </body>
  </html>
</xsl:template>

<xsl:template match="book">
  <div><xsl:value-of select="title"/></div>
</xsl:template>

テンプレートを分割することで、コードが整理されて読みやすくなります。

xsl:attribute

要素に動的に属性を追加します。

<a>
  <xsl:attribute name="href">
    <xsl:value-of select="url"/>
  </xsl:attribute>
  <xsl:value-of select="title"/>
</a>

実践例:XMLをHTMLに変換

実際の変換例を見てみましょう。

元のXMLデータ

<?xml version="1.0" encoding="UTF-8"?>
<catalog>
  <product>
    <name>ノートパソコン</name>
    <price>89800</price>
    <stock>5</stock>
  </product>
  <product>
    <name>マウス</name>
    <price>1980</price>
    <stock>20</stock>
  </product>
  <product>
    <name>キーボード</name>
    <price>4500</price>
    <stock>0</stock>
  </product>
</catalog>

XSLTスタイルシート

<?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>
      <head>
        <title>商品カタログ</title>
      </head>
      <body>
        <h1>商品一覧</h1>
        <table border="1">
          <tr>
            <th>商品名</th>
            <th>価格</th>
            <th>在庫状況</th>
          </tr>
          <xsl:for-each select="catalog/product">
            <tr>
              <td><xsl:value-of select="name"/></td>
              <td><xsl:value-of select="price"/>円</td>
              <td>
                <xsl:choose>
                  <xsl:when test="stock = 0">
                    <span style="color:red;">在庫切れ</span>
                  </xsl:when>
                  <xsl:when test="stock &lt; 10">
                    <span style="color:orange;">残りわずか</span>
                  </xsl:when>
                  <xsl:otherwise>
                    <span style="color:green;">在庫あり</span>
                  </xsl:otherwise>
                </xsl:choose>
              </td>
            </tr>
          </xsl:for-each>
        </table>
      </body>
    </html>
  </xsl:template>

</xsl:stylesheet>

変換結果(HTML)

この2つのファイルを処理すると、在庫状況に応じて色分けされた、きれいな商品一覧のHTMLページが生成されます。


XSLTプロセッサ:変換を実行するエンジン

XSLTによる変換を実際に行うには、XSLTプロセッサと呼ばれるソフトウェアが必要です。

主要なXSLTプロセッサ

Saxon
最も有名で高性能なXSLTプロセッサ。XSLT 3.0に対応しています。JavaとC#版があります。

Xalan
Apache Software Foundationが開発するオープンソースのプロセッサ。JavaとC++版があります。

libxslt
C言語で書かれた軽量なプロセッサ。LinuxやmacOSで広く使われています。

MSXML / .NET XslCompiledTransform
Microsoftが提供するXSLTプロセッサ。Windows環境でよく使われます。

ブラウザでの実行

主要なWebブラウザ(Chrome、Firefox、Safari、Edge)には、XSLTプロセッサが組み込まれています。

XMLファイルの冒頭に、次のような処理命令を書くと、ブラウザが自動的に変換して表示してくれます。

<?xml-stylesheet type="text/xsl" href="style.xsl"?>

ただし、セキュリティ制約があるため、ローカルファイルでは動かないことがあります。

コマンドラインでの実行

Saxonを使った例:

java -jar saxon.jar -s:input.xml -xsl:transform.xsl -o:output.html

libxsltを使った例:

xsltproc transform.xsl input.xml > output.html

XSLTのバージョン

XSLTには、主に3つのバージョンがあります。

XSLT 1.0

1999年にリリースされた最初のバージョン。基本的な変換機能を提供します。

特徴:

  • シンプルで学びやすい
  • ほぼすべてのプロセッサが対応
  • 機能は限定的

対応プロセッサ:
ほぼすべてのXSLTプロセッサ、Webブラウザの内蔵プロセッサ

XSLT 2.0

2007年にリリースされた大幅なアップグレード版。

新機能:

  • 複数の出力ドキュメント生成
  • グループ化機能
  • 正規表現のサポート
  • より強力な関数とデータ型
  • XPath 2.0の機能

対応プロセッサ:
Saxon、Altova など(ブラウザは基本的に非対応)

XSLT 3.0

2017年にリリースされた最新バージョン。

新機能:

  • ストリーミング処理(大容量XMLの効率的な処理)
  • JSON対応
  • 高階関数
  • パッケージ機能
  • XPath 3.0の機能

対応プロセッサ:
Saxon(商用版とオープンソース版の一部機能)

どれを使うべき?

シンプルな変換の場合
XSLT 1.0で十分です。互換性が高く、ブラウザでも動作します。

高度な処理が必要な場合
XSLT 2.0以降が便利ですが、専用のプロセッサが必要になります。


XSLTのメリット

XSLTには、たくさんの利点があります。

データと表示の分離

XMLにはデータだけを記述し、表示方法はXSLTで定義します。

データが変わっても、XSLTを変更するだけで表示を調整できるので、メンテナンスが楽になるんです。

1つのデータから複数の出力

同じXMLデータから、Web用、印刷用、モバイル用など、異なる形式を生成できます。

データを重複管理する必要がありません。

標準化された技術

W3C(World Wide Web Consortium)が策定した国際標準なので、多くのツールやプラットフォームで使えます。

宣言的な記述

「どうやって処理するか」ではなく、「何を出力するか」を記述する宣言的なスタイルなので、比較的理解しやすい構造になっています。


XSLTのデメリット

便利なXSLTですが、課題もあります。

学習コスト

XMLの知識に加えて、XSLT独自の要素やXPathを学ぶ必要があります。初心者には少しハードルが高いかもしれません。

パフォーマンス

大量のデータを処理する場合、変換に時間がかかることがあります。リアルタイム処理には向かない場合も。

デバッグの難しさ

エラーメッセージが分かりにくいことがあり、問題の原因を特定するのが難しい場合があります。

限定的なサポート

最新のXSLT 2.0や3.0をサポートするプロセッサは限られています。特にWebブラウザはXSLT 1.0までの対応です。


XSLTの実用例

実際の現場で、XSLTはどんな風に使われているのでしょうか。

コンテンツ管理システム(CMS)

WebサイトのコンテンツをXMLで管理し、XSLTでHTMLに変換して公開するシステムがあります。

同じコンテンツを、PC版とモバイル版で異なるレイアウトで表示する場合に便利です。

電子文書の変換

DocBook(技術文書の標準フォーマット)やTEI(学術テキストの標準フォーマット)などのXML形式から、HTMLやPDFを生成する際にXSLTが使われます。

データ交換

異なるシステム間でXMLデータをやり取りする際、相手のシステムが求める形式に変換するためにXSLTを使います。

レポート生成

データベースから出力されたXMLデータを、読みやすいレポート形式(HTML、PDFなど)に変換します。

設定ファイルの生成

アプリケーションの設定をXMLで一元管理し、各環境(開発、テスト、本番)用の設定ファイルをXSLTで自動生成する使い方もあります。


現代におけるXSLTの位置づけ

XSLTは1990年代後半から2000年代に広く使われましたが、現在の状況はどうでしょうか。

使用頻度の変化

Webアプリケーション開発では、JavaScriptフレームワーク(React、Vue.js、Angularなど)やテンプレートエンジン(Jinja、Handlebars、EJSなど)が主流になっています。

ブラウザ側でのXSLT変換は、セキュリティや性能の理由であまり使われなくなりました。

今でも活躍する分野

文書処理・出版業界
XMLベースの文書管理システムでは、今でもXSLTが重要な役割を果たしています。

企業間データ交換
EDI(電子データ交換)など、標準化されたXML形式を使うシステムでは、XSLTが現役です。

レガシーシステム
既存のXMLベースのシステムでは、引き続きXSLTが使われています。

学ぶ価値はある?

新規のWebアプリケーション開発でXSLTを選ぶケースは減っていますが、次のような場合には学ぶ価値があります。

  • XML処理が中心の業務に携わる
  • レガシーシステムのメンテナンス
  • 文書管理や出版系のシステム開発
  • データ変換の基本概念を学ぶ

XSLTで学んだ「データと表示の分離」という考え方は、他の技術でも応用できる普遍的な概念です。


まとめ:XMLを自在に操る強力な変換言語

XSLTは、XMLドキュメントを別の形式に変換するための専用言語です。

この記事のポイント:

  • XSLTはXMLを別の形式(HTML、XML、テキストなど)に変換する言語
  • テンプレートベースで変換ルールを記述する
  • XPathを使ってXMLの特定部分を指定する
  • xsl:for-each、xsl:if、xsl:chooseなどの要素で柔軟な処理が可能
  • XSLTプロセッサ(Saxon、Xalanなど)で実際の変換を実行
  • XSLT 1.0、2.0、3.0のバージョンがあり、新しいほど高機能
  • データと表示の分離により保守性が向上
  • 現代のWeb開発では使用頻度が減ったが、文書処理や企業システムでは現役
  • 学習コストはあるが、XML処理の基本概念として価値がある

新しいプロジェクトでXSLTを選ぶことは減りましたが、既存システムの保守や特定の業界では今でも重要な技術です。XMLデータを扱う機会がある方は、XSLTの基本を知っておくと役立つ場面があるかもしれませんね。

コメント

タイトルとURLをコピーしました