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という選択肢があることを思い出してください!


コメント