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 > 3000">
  <span class="expensive">高額書籍</span>
</xsl:if>XMLの中では、「>」を「>」と書く必要があります(エスケープ処理)。
xsl:choose / xsl:when / xsl:otherwise
複数の条件分岐を行います。プログラミングのif-else文に相当します。
<xsl:choose>
  <xsl:when test="price < 2000">
    <span class="cheap">お手頃価格</span>
  </xsl:when>
  <xsl:when test="price < 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 < 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.htmllibxsltを使った例:
xsltproc transform.xsl input.xml > output.htmlXSLTのバージョン
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の基本を知っておくと役立つ場面があるかもしれませんね。
 
  
  
  
   
               
               
               
               
              
コメント