XMLの空白文字を削除するXSLTスタイルシート

巨大なXML文書のテキスト内容の前後に含まれる空白文字を削除する必要に迫られたので、XSLTスタイルシートを作ってみました。簡単なものですが、誰かの役に立つかもしれないので載せておきます。

XSLTスタイルシートは、こんな感じです。

<?xml version='1.0' ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output indent="no" omit-xml-declaration="yes"/>
  <xsl:template match="node()|@*">
    <xsl:copy>
      <xsl:apply-templates select="@*"/>
      <xsl:apply-templates/>
    </xsl:copy>
  </xsl:template>
  <xsl:template match="text()">
    <xsl:value-of select="normalize-space(.)"/>
  </xsl:template>
</xsl:stylesheet>

こんなXML文書を変換すると… (行末のスペースを"_"で示しています)

<?xml version='1.0' encoding='Shift_JIS'?>
    <a b="あ"  >____
        <い>    うえお____
        </い>_____
    </a>____
____

こんなXML文書が生成されます。

<a b="あ"><い>うえお</い></a>

今回はOracle XDK (XML Developer's Kit) に含まれるXSLTプロセッサと、それを呼び出すコマンドライン・ツール oraxslで実行していますが、Xalanなど他のXSLT実装でも使えると思います、たぶん。