Index > XSLTで内容をコピーした上で XPATHで指定した位置に要素を追加する記述
Sun, December 27, 2009

XSLTで内容をコピーした上で XPATHで指定した位置に要素を追加する記述

このXSLのイディオムはあまりによく使うのでメモ。

やりたいこと

title要素の前に border 要素を追加したい。

変換前

<?xml version="1.0" encoding="UTF-8"?>
<book>
  <chapter>
    <sect1>
      <title>設置と接続</title>
    </sect1>
  </chapter>
</book>

変換後

<?xml version="1.0" encoding="UTF-8"?>
<book>
  <chapter>
    <sect1>
      <border />
      <title>設置と接続</title>
    </sect1>
  </chapter>
</book>

変換前から変換後を作り出す conv.xsl

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

    <!-- すべての内容をコピーするお約束指定 -->
    <xsl:template match="@*|node()" >
        <xsl:copy>
            <xsl:apply-templates select="@*|node()" />
        </xsl:copy>
    </xsl:template>


    <!-- title要素の前に border を追加 -->
    <xsl:template match="title" >
        <border />
        <xsl:copy>
            <xsl:apply-templates select="@*|node()" />
        </xsl:copy>
    </xsl:template>

</xsl:stylesheet>

変換を実行

$ xsltproc conv.xsl sample.xml

結果が標準出力されます。

 Twitter
follow me on Twitter
 Categories