Webサイトを作ったり、システム間でデータをやり取りしたりするとき、「このXMLデータをHTMLに変換したい」「別の形式のXMLに変えたい」と思ったことはありませんか?
そんなときに活躍するのが、XSLT変換という技術です。
XSLT(Extensible Stylesheet Language Transformations:拡張可能なスタイルシート言語変換)は、XMLデータを別の形式に変換するための専用言語です。
「XMLからHTMLを生成する」
「データの並び順を変える」
「特定の要素だけを抽出する」
こんな複雑な変換作業を、宣言的に記述できるのがXSLTの魅力なんです。
この記事では、XSLTの基本から、実際の変換例、使いどころまで、初心者の方にも分かりやすく解説していきます。
Web開発やデータ処理に興味がある方は、ぜひ最後まで読んでみてください!
XMLとXSLTの基本を理解しよう

XSLTを学ぶ前に、XMLの基本を押さえておきましょう。
XMLとは
XML(Extensible Markup Language)は、データを構造化して保存するためのマークアップ言語です。
HTMLと似ていますが、タグを自由に定義できるのが特徴です。
XMLの例:
<?xml version="1.0" encoding="UTF-8"?>
<books>
  <book>
    <title>星の王子さま</title>
    <author>サン=テグジュペリ</author>
    <price>800</price>
  </book>
  <book>
    <title>走れメロス</title>
    <author>太宰治</author>
    <price>600</price>
  </book>
</books>
このように、階層構造でデータを表現できます。
XSLTが解決する問題
XMLは便利ですが、そのままでは人間が読みにくいですよね。
また、システムごとに必要なXMLの形式が違うこともあります。
XSLTができること:
- XMLをHTMLに変換して、Webページとして表示
 - XMLを別の構造のXMLに変換
 - XMLからテキストファイルを生成
 - データの抽出、並べ替え、フィルタリング
 
XSLTの位置づけ
XSLTは、XSL(Extensable Stylesheet Language)という技術群の一部です。
XSLの3つの構成要素:
- XSLT:変換を行う
 - XPath:XML内の要素を指定する
 - XSL-FO:印刷用のフォーマット(現在はあまり使われない)
 
この記事では、最も重要なXSLTに焦点を当てます。
XSLTの基本的な仕組み
XSLTがどのように動作するのか見ていきましょう。
3つの要素
XSLT変換には、3つの要素が必要です。
1. 入力XML:
変換したい元のXMLデータです。
2. XSLTスタイルシート:
「どのように変換するか」を記述したファイルです。
これ自体もXML形式で書かれています。
3. 出力:
変換後の結果です。
HTML、別のXML、テキストなど、様々な形式で出力できます。
変換の流れ
XSLTによる変換は、次のように進みます:
- XSLTプロセッサが起動
 - 入力XMLを読み込む
 - XSLTスタイルシートを読み込む
 - スタイルシートの指示に従って変換
 - 結果を出力
 
この処理は、専用のソフトウェア(XSLTプロセッサ)が自動的に行います。
XPathの役割
XSLTでは、XPathという言語を使って、XML内の特定の要素を指定します。
XPathは、ファイルシステムのパスに似た表記法です。
XPathの例:
/books/book/title        →すべての本のタイトル
/books/book[1]           →最初の本
/books/book[price<700]   →価格が700円未満の本
このように、柔軟にデータを指定できるんですね。
最初のXSLT変換:シンプルな例
実際にXSLT変換を見てみましょう。
入力XML
まず、変換元のXMLです。
<?xml version="1.0" encoding="UTF-8"?>
<books>
  <book>
    <title>星の王子さま</title>
    <author>サン=テグジュペリ</author>
  </book>
  <book>
    <title>走れメロス</title>
    <author>太宰治</author>
  </book>
</books>
XSLTスタイルシート
次に、変換ルールを記述した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>書籍リスト</h1>
        <ul>
          <xsl:apply-templates select="books/book"/>
        </ul>
      </body>
    </html>
  </xsl:template>
  <xsl:template match="book">
    <li>
      <xsl:value-of select="title"/> - 
      <xsl:value-of select="author"/>
    </li>
  </xsl:template>
</xsl:stylesheet>
変換結果
上記のXMLとXSLTを変換すると、こんなHTMLが生成されます。
<html>
  <body>
    <h1>書籍リスト</h1>
    <ul>
      <li>星の王子さま - サン=テグジュペリ</li>
      <li>走れメロス - 太宰治</li>
    </ul>
  </body>
</html>
XMLデータが、きれいなHTMLに変換されましたね!
XSLTの主要な要素

XSLTで使う重要な要素を見ていきましょう。
xsl:stylesheet(ルート要素)
すべてのXSLTファイルは、この要素で始まります。
<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <!-- 変換ルールをここに書く -->
</xsl:stylesheet>
バージョンと名前空間の宣言が必要です。
xsl:template(テンプレート)
変換ルールを定義します。
<xsl:template match="パターン">
  <!-- 変換内容 -->
</xsl:template>
match属性:
どのXML要素に適用するかを指定します。
xsl:value-of(値の取得)
XML要素の値を取り出して出力します。
<xsl:value-of select="title"/>
select属性にXPathを指定します。
xsl:for-each(繰り返し)
複数の要素に対して、同じ処理を繰り返します。
<xsl:for-each select="books/book">
  <p><xsl:value-of select="title"/></p>
</xsl:for-each>
すべての本について、タイトルを出力する例です。
xsl:if(条件分岐)
条件に応じて処理を変えます。
<xsl:if test="price < 700">
  <span style="color:red">お買い得!</span>
</xsl:if>
価格が700円未満なら、特別な表示をする例です。
xsl:choose(複数条件分岐)
複数の条件で分岐します。
<xsl:choose>
  <xsl:when test="price < 500">
    <span>激安</span>
  </xsl:when>
  <xsl:when test="price < 1000">
    <span>お手頃</span>
  </xsl:when>
  <xsl:otherwise>
    <span>通常価格</span>
  </xsl:otherwise>
</xsl:choose>
if-else if-elseのような処理ができます。
xsl:sort(並べ替え)
データを並べ替えて出力します。
<xsl:for-each select="books/book">
  <xsl:sort select="price" data-type="number" order="ascending"/>
  <p><xsl:value-of select="title"/> - <xsl:value-of select="price"/>円</p>
</xsl:for-each>
価格の安い順に本を表示する例です。
実践的な変換例
より実用的な例を見てみましょう。
例1:データテーブルの生成
XMLからHTMLのテーブルを作成します。
入力XML:
<products>
  <product>
    <name>ノートパソコン</name>
    <price>80000</price>
    <stock>5</stock>
  </product>
  <product>
    <name>マウス</name>
    <price>1500</price>
    <stock>20</stock>
  </product>
</products>
XSLT:
<xsl:template match="/">
  <table border="1">
    <tr>
      <th>商品名</th>
      <th>価格</th>
      <th>在庫</th>
    </tr>
    <xsl:for-each select="products/product">
      <tr>
        <td><xsl:value-of select="name"/></td>
        <td><xsl:value-of select="price"/>円</td>
        <td><xsl:value-of select="stock"/>個</td>
      </tr>
    </xsl:for-each>
  </table>
</xsl:template>
例2:フィルタリングと計算
特定の条件に合うデータだけを表示し、合計を計算します。
XSLT:
<xsl:template match="/">
  <div>
    <h2>1000円以下の商品</h2>
    <ul>
      <xsl:for-each select="products/product[price <= 1000]">
        <li><xsl:value-of select="name"/> - <xsl:value-of select="price"/>円</li>
      </xsl:for-each>
    </ul>
    <p>合計金額:<xsl:value-of select="sum(products/product/price)"/>円</p>
  </div>
</xsl:template>
XPathの述語([]内)で条件を指定し、sum()関数で合計を計算しています。
例3:XML構造の変換
あるXML形式を、別のXML形式に変換します。
入力XML:
<old-format>
  <item id="1" name="りんご" price="150"/>
  <item id="2" name="みかん" price="100"/>
</old-format>
XSLT:
<xsl:template match="/">
  <new-format>
    <xsl:for-each select="old-format/item">
      <product>
        <id><xsl:value-of select="@id"/></id>
        <name><xsl:value-of select="@name"/></name>
        <price><xsl:value-of select="@price"/></price>
      </product>
    </xsl:for-each>
  </new-format>
</xsl:template>
出力XML:
<new-format>
  <product>
    <id>1</id>
    <name>りんご</name>
    <price>150</price>
  </product>
  <product>
    <id>2</id>
    <name>みかん</name>
    <price>100</price>
  </product>
</new-format>
XSLTのメリット
XSLTを使う利点を見てみましょう。
データとプレゼンテーションの分離
XMLにはデータだけを保存し、表示方法はXSLTで定義できます。
これにより:
- 同じデータから複数の表示形式を生成できる
 - データを変えずに見た目を変更できる
 - 保守性が向上する
 
宣言的な記述
「どうやって変換するか」ではなく、「何を変換するか」を記述します。
手続き型のプログラミングより、直感的で分かりやすいことが多いです。
標準化された技術
XSLTはW3C(World Wide Web Consortium)の標準規格です。
多くのツールやライブラリでサポートされているため、互換性が高いんですね。
複雑な変換も可能
単純なテンプレート適用だけでなく:
- 条件分岐
 - 繰り返し
 - 並べ替え
 - グループ化
 - 数値計算
 
など、複雑な処理も記述できます。
再利用性
一度作成したXSLTスタイルシートは、同じ構造のXMLに対して何度でも使用できます。
XSLTのデメリットと注意点
良いことばかりではありません。課題も見ておきましょう。
学習コストが高い
XSLTは独特の記法があり、習得に時間がかかります。
XPathとXSLTの両方を理解する必要があるんです。
デバッグが難しい
エラーが起きたとき、原因を特定するのが難しいことがあります。
変換結果を見ても、どこで間違ったのか分かりにくい場合があるんですね。
パフォーマンスの問題
大きなXMLファイルを変換する場合、処理時間がかかることがあります。
メモリ消費も多くなりがちです。
バージョンの違い
XSLT 1.0と2.0、3.0では機能が大きく異なります。
すべてのプロセッサが最新バージョンに対応しているわけではありません。
他の技術との競合
最近では、JavaScriptやPythonなどのプログラミング言語でXML処理を行うことも多くなっています。
XSLTは、必ずしも最適な選択肢ではない場合があるんです。
XSLTプロセッサと実行環境
XSLTを実行するには、プロセッサが必要です。
主なXSLTプロセッサ
Xalan:
- Apache Foundationが開発
 - JavaとC++版がある
 - XSLT 1.0に対応
 
Saxon:
- 最も高機能なプロセッサの一つ
 - XSLT 2.0と3.0に対応
 - 商用版と無料版がある
 
libxslt:
- C言語で実装された軽量なプロセッサ
 - LinuxやMacOSで広く使われる
 - XSLT 1.0に対応
 
ブラウザでの実行
主要なブラウザは、XSLT変換機能を内蔵しています。
XMLファイルに、スタイルシートへの参照を追加するだけで、ブラウザが自動的に変換して表示します。
XMLファイルの先頭に追加:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="style.xsl"?>
<books>
  <!-- データ -->
</books>
ただし、現代のWeb開発では、この方法はあまり使われません。
コマンドラインでの実行
Saxonなどのプロセッサを使って、コマンドラインから変換できます。
java -jar saxon.jar -s:input.xml -xsl:transform.xsl -o:output.html
プログラミング言語からの利用
多くの言語に、XSLT変換のライブラリがあります。
Pythonの例:
from lxml import etree
# XMLとXSLTを読み込み
xml_doc = etree.parse('input.xml')
xslt_doc = etree.parse('transform.xsl')
# 変換を実行
transform = etree.XSLT(xslt_doc)
result = transform(xml_doc)
# 結果を出力
print(str(result))
XSLTの実用的な使いどころ
実際にどんな場面でXSLTが使われるのでしょうか。
Webサイトのコンテンツ管理
XMLでコンテンツを管理し、XSLTでHTMLに変換してWebサイトを生成します。
CMSの一部として使われることもあります。
データ交換システム
異なるシステム間でデータをやり取りする際、XML形式の変換が必要になることがあります。
XSLTを使えば、柔軟にフォーマットを変換できるんです。
レポート生成
データベースから取得したデータをXML形式で出力し、XSLTで整形されたレポートを生成します。
RSS/Atomフィードの表示
RSSやAtomフィードは、XML形式です。
XSLTを使って、ブラウザで読みやすく表示できます。
電子文書の変換
XMLベースの文書フォーマット(DocBookなど)を、HTMLやPDFに変換する際に使用されます。
Web APIのレスポンス変換
一部のWeb APIは、XMLでデータを返します。
XSLTを使って、アプリケーションが必要とする形式に変換できます。
XSLTと他の技術の比較
XSLTの代替技術と比較してみましょう。
JavaScriptによるXML処理
JavaScript(DOM操作):
- ブラウザで動的に処理できる
 - 柔軟性が高い
 - 学習コストが低い(多くの人が知っている)
 
XSLT:
- 宣言的で分かりやすい(慣れれば)
 - サーバーサイドでも動作
 - XML処理に特化している
 
プログラミング言語でのXML処理
PythonやJavaなどでXMLを処理する方法もあります。
プログラミング言語:
- 複雑なロジックを書きやすい
 - デバッグしやすい
 - 他の処理と統合しやすい
 
XSLT:
- XML変換に特化した記法
 - 標準化されている
 - 変換ロジックを独立して管理できる
 
テンプレートエンジン
Jinja2(Python)やMustacheなどのテンプレートエンジンでも、XMLからHTMLを生成できます。
テンプレートエンジン:
- 現代的な機能が豊富
 - 学習しやすい
 - Webフレームワークとの統合
 
XSLT:
- XML専用の強力な機能
 - 標準規格
 - 長い歴史と実績
 
現代のWeb開発におけるXSLT
XSLTは今でも使われているのでしょうか。
利用状況
正直に言うと、XSLTの人気は以前より低下しています。
理由:
- JavaScriptの進化(React、Vueなど)
 - JSONの普及(XMLより軽量)
 - より使いやすいツールの登場
 
今でもXSLTが使われる場面
しかし、以下のような分野では今でも現役です:
レガシーシステム:
既存のXMLベースシステムで、XSLTが組み込まれている場合。
ドキュメント変換:
技術文書や電子書籍の変換システム。
エンタープライズシステム:
大企業のデータ交換基盤で、標準技術として採用されている場合。
特定の業界:
金融や医療など、XMLが標準フォーマットの業界。
学ぶ価値はあるか
学ぶべき人:
- 既存のXSLTシステムを保守する人
 - XML処理が多い業務に携わる人
 - 標準技術を幅広く知りたい人
 
優先度は低い人:
- 新規のWeb開発がメイン
 - JSONベースのAPIを扱う
 - モダンなフロントエンド開発に集中したい
 
XSLTのベストプラクティス
もしXSLTを使うなら、こんな点に注意しましょう。
可読性を重視する
XSLTは複雑になりがちなので、分かりやすく書くことが大切です。
推奨:
- 適切なインデント
 - コメントの追加
 - テンプレートを小さく保つ
 - 名前付きテンプレートで再利用
 
パフォーマンスを考慮する
大きなXMLの処理では、パフォーマンスが問題になることがあります。
対策:
- 不要な処理を避ける
 - XPathを効率的に書く
 - 可能ならストリーミング処理を使う
 
バージョンを明示する
XSLT 1.0、2.0、3.0のどれを使っているか明確にしましょう。
プロセッサの互換性を確認することも大切です。
テストを書く
変換結果が正しいか確認するテストを作成しましょう。
入力XMLと期待される出力を用意して、自動テストを行うのが理想的です。
まとめ:XSLTはXML変換の強力なツール
XSLT変換は、XMLデータを別の形式に変換するための専用言語です。
この記事の重要ポイントをおさらいしましょう:
- XSLTはXML専用の変換言語
 - 宣言的な記述で変換ルールを定義する
 - XPathを使ってXML要素を指定
 - HTMLやテキスト、別のXMLなど様々な形式に変換可能
 - データとプレゼンテーションの分離が可能
 - 学習コストが高く、デバッグが難しいのが欠点
 - 標準化された技術で互換性が高い
 - 現代ではJSONやJavaScriptが主流だが、特定分野では現役
 - レガシーシステムやドキュメント変換で使用される
 - Pythonなどからプログラム的に実行できる
 
XSLTは、一見すると古い技術に見えるかもしれません。
しかし、XML処理が必要な場面では、今でも強力なツールです。
特に、既存のXMLシステムを扱う場合や、標準的な変換方法が必要な場合には、XSLTの知識が役立ちます。
「XMLをきれいに表示したい」
「システム間でデータ形式を変換したい」
そんなとき、XSLTという選択肢があることを思い出してください!
  
  
  
  
              
              
              
              
              

コメント