自分の Web サイトの (X)HTML ファイルの一部を XSLT で処理しているので、それについてのメモ。
例えば、 https://miz-ar.info/math/singularity/ のソースを表示させると、要素間の空白や改行が全くないが、この「要素間の空白や改行を削除する」処理は XSLT で行なっている。エディターで編集する元ファイルには編集しやすいようにちゃんと改行やインデントが入っている。
XSLT という技術(少なくとも、現行の1.0/2.0)は HTML5 と親和性が高いとはお世辞にも言えず(具体的には、 <xsl:output> で <!DOCTYPE html> を出力するように指定できない)、これを2016年に使うのはどうなのかという心の声が聞こえるが、まあ気にしないことにする。(ちなみに、 XSLT で <!DOCTYPE html> を出力する方法自体は、“xslt html5” で検索すれば出てくる。あるいは、 about:legacy-compat を使うのでも良いだろう。)
XSLT の規格:
空白を削除する
エディターで編集するときはインデントとかの都合で要素間に空白を入れたいが、実際に使うときは要素間の空白を入れたくない場合。 <xsl:strip-space> を使うと良い。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml"
encoding="UTF-8"
/>
<xsl:strip-space elements="*" />
<xsl:template match="comment()">
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
特定の<script>要素のsrc属性を書き換える
<script src=”main.js” /> を <script src=”main.min.js” /> に書き換える例。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
xmlns:xhtml="http://www.w3.org/1999/xhtml"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0"
>
<xsl:output method="xml"
encoding="UTF-8"
/>
<xsl:template match="//xhtml:script/@src[string()='main.js']">
<xsl:attribute name="src">main.min.js</xsl:attribute>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>