XSLTスタイルシートのフォーマット — テンプレート、マッチパターン、出力

XSLTスタイルシートXMLを読みやすくフォーマットします。テンプレートルール、マッチパターン、xsl:apply-templates、xsl:for-each、出力メソッド、適切なフォーマットがXSLTデバッグにどう役立つかを解説します。

Advanced

詳細な説明

XSLTスタイルシートのフォーマット

XSLT(Extensible Stylesheet Language Transformations)スタイルシートは、XMLを他の形式(XML、HTML、テキスト)に変換するルールを定義するXMLドキュメントです。XSLTファイルは適切なフォーマットなしでは読みにくいことで有名です。

基本的なXSLT構造

<xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:output method="html" indent="yes" />

  <xsl:template match="/">
    <html>
      <body>
        <h1><xsl:value-of select="/catalog/title" /></h1>
        <xsl:apply-templates select="/catalog/book" />
      </body>
    </html>
  </xsl:template>

  <xsl:template match="book">
    <div class="book">
      <h2><xsl:value-of select="title" /></h2>
      <p>Price: <xsl:value-of select="price" /></p>
    </div>
  </xsl:template>

</xsl:stylesheet>

テンプレートルール

<xsl:template> は、match 属性(XPath式)に一致する要素の変換ルールを定義します。フォーマットではテンプレートルールを空行で明確に分離し、コンテンツを一貫してインデントすべきです。

XSLT命令

明確なインデントの恩恵を受ける一般的なXSLT命令:

  • <xsl:for-each select="..."> — 反復
  • <xsl:if test="..."> — 条件分岐
  • <xsl:choose> / <xsl:when> / <xsl:otherwise> — 多分岐条件
  • <xsl:variable name="..."> — 変数宣言
  • <xsl:call-template name="..."> — 名前付きテンプレート呼び出し

混合コンテンツの課題

XSLTはしばしば混合コンテンツ — XSLT命令とリテラル出力マークアップ(HTMLタグ、テキスト)が混在 — を含みます。フォーマットはXSLTロジック構造と出力テンプレート構造の両方を処理する必要があります:

<xsl:template match="item">
  <tr>
    <td><xsl:value-of select="name" /></td>
    <td>
      <xsl:choose>
        <xsl:when test="@status = 'active'">
          <span class="active">Active</span>
        </xsl:when>
        <xsl:otherwise>
          <span class="inactive">Inactive</span>
        </xsl:otherwise>
      </xsl:choose>
    </td>
  </tr>
</xsl:template>

属性内のXPath式

XSLTは selecttestmatch 属性でXPath式を多用します。これらの式は長く複雑になることがあります。フォーマッターは属性値を行間で分割できませんが、一貫した要素のインデントにより変換ロジックを追うために必要な視覚的構造が提供されます。

ユースケース

XSLTフォーマットは、出版システム、データ統合プラットフォーム、エンタープライズミドルウェアでXML変換パイプラインを維持する開発者に不可欠です。読みやすいXSLTにより、ソースXMLが出力にどうマッピングされるかの追跡、変換エラーのデバッグ、複雑なテンプレート階層のリファクタリングが可能になります。

試してみる — XML Formatter

フルツールを開く