0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

XML学習備忘録07_Saxon-HEによるXMLのXSLT変換について

0
Last updated at Posted at 2026-09-23

に示した

VSCodeの拡張機能Live Serverを利用したXMLのブラウザ表示は、
必ずしもこちらが期待したXSLT変換結果を表示しているわけではない

らしい....(-_-;) 何度か自分でも試してみた感じ、ざっくり述べると

XSLT変換した結果生成されるはずのHTMLないしXMLに、
HTMLで定義されていないタグが含まれている場合、
変換結果とブラウザ表示の結果が大概異なる

⇒ XSLT変換結果を何らかの形で保存して、ブラウザ表示と比較することが大事

例えば

sampleフォルダに対して、以下のようにsample.xml、sample.xsltがあり

sample
   |---sample.xml
   |---sample.xslt

sample.xml、sample.xsltが

<?xml version="1.0" encoding="UTF-8"?>

<?xml-stylesheet type="text/xsl" href="sample.xslt"?>
<!-- 👆sample.xmlにsample1.xsltを適用するようにするための宣言   -->
<!-- 👆href にはこのsample.xmlから見た適用させたいsample.xsltの相対パスを書く-->

<sample>
    <example>hogehoge</example>
    <explanation>ホゲホゲとは</explanation>
</sample>
<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!-- このファイル全体がxsl(スタイルシート)の一種であることの宣言 -->

    <xsl:template match="/">
        <result>
            <xsl:call-template name="result-call" />
    <!-- nameの値には呼び出すテンプレートルールの名前を代入-->    
        </result>
    </xsl:template>

    <xsl:template name="result-call">
    <!-- 上のcall-template のnameの値に対応させる-->
    <!-- カレントノードはルートノード-->    
        <xsl:value-of select="sample/example" />
        <detail>
        <xsl:value-of select="sample/explanation" />
        </detail>    
    </xsl:template>
</xsl:stylesheet>

となっている場合、Live Serverを通して ブラウザ内蔵のXSLTプロセッサ で変換してブラウザ表示しようとしてみると自分の場合こうなった

image.png

しかし本来は

<?xml version="1.0" encoding="UTF-8"?>
<result>hogehoge
    <detail>ホゲホゲとは</detail>
</result>

と変換されているはずである。

ところが、<result>タグ、<detail>タグはHTML要素にはない。結果ズレる

さらにまもなく以下のように ブラウザ内蔵のXSLTプロセッサ は各ブラウザから削除されていく潮流にある
ブラウザの安全性を高めるための XSLT の削除


XSLT変換結果をSaxon-HEを利用して保存

自宅PCのVSCode環境で学習するレベルであれば、特に機密情報を含むわけではないし、これが一番手軽だった。

そもそもSaxon-HEとは

アメリカのSaxonica社が無償で提供しているJavaの実行環境で動くオープンソースのXSLTプロセッサ

※公式サイトは https://www.saxonica.com/download/java.xml

準備

(1)JDK(Java Development Kit) のインストール

※自分は以下のリンク先から今回は「Temurin jdk-21.0.12.1+1」のMSI(Microsoft Installer)をダウンロードした

JDKMSI.png

ダウンロード後、~.msiがいるはずなので、そいつをポチポチして説明に従い、JDKをインストールしていく。

JAVA_HOME設定.png

JAVA_HOME はあらかじめ設定しておいた方がよいとのことだったので、途中 「set JAVA_HOME variable」が「インストールしていない」になっているのを変えてインストールを進めた。

(2)JDKが無事インストールされたかの確認

コマンドプロンプトやPowershellを開いて以下のコマンドを確認。
※筆者はここからVSCodeを利用

java --version
javac --version

※JAVA_HOMEの設定の確認

echo $env:JAVA_HOME

JDKのversion確認.jpg

(3)Saxon-HEをダウンロード

※今回、自分は https://www.saxonica.com/download/java.xml から赤丸のやつを入れた。個人学習に使う程度のレベルであれば、随時バージョンが新しい-HEのものをダウンロードしていけばバージョン管理は大丈夫そう。

Saxonica.jpg

(4)sample.xml等のフォルダ構成を整える

(3)のダウンロードの結果、ZIPファイルが落ちるので、以下の感じで展開する

Saxon-HEフォルダ構成.png

XSLT変換コマンド

java -jar saxon-he-〇〇.××.jar -s:sample.xml -xsl:sample.xslt -o:result.xml
#saxon-he-の「〇〇.××」には各自適宜PCに入れたSaxon-Heの入れたバージョンの数字を入れる
#-s:変換したいXML
#-xsl:変換に使用したいXSLT
#-o:変換結果として生成されるファイルのファイル名(※任意、.htmlもありうる)

なお仮に、フォルダ構成が以下のような場合、-s:、-xsl:、-o:の後ろに次のような感じで相対パスをいじるか、カレントディレクトリを移動させるかしてください

C:\XSLT\
│
└─ Saxon\
    │
    ├─ Saxon-he-〇〇.××.jar
    │
    └─ sample\
        ├─ sample.xml
        └─ sample.xslt
cd C:\XSLT\Saxon

で移動した後、

java -jar saxon-he-〇〇.××.jar -s:sample\sample.xml -xsl:sample\sample.xslt -o:sample\result.xml

実行結果例

冒頭の例の場合。

XSLT変換前.png

変換(=書き出し)後

XSLT変換後.png

これをブラウザ表示すると

変換結果XMLブラウザ表示.png

と変換すると、こうなるだろうという構造が表示される


JDK(Java Development Kit)

Javaでソフトウェアを開発するために必要なコンパイラやライブラリなどのツールをまとめた開発キット

JAVA_HOME

コンピュータにインストールされているJava(JDK:Java Development Kit)のルートフォルダの場所を指定する環境変数

※これと似たような環境変数でPathというのもある

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?