Home About Contact
XML

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

title要素の前に border 要素を追加したいなど、 変換後のXMLに要素などを追記するという XSLの記述はよく使うのでメモ。

変換元のXML

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

この XMLのタイトル要素の前に border 要素を追加したい…以下のように。

<border />
<title>設置と接続</title>

これをやってみます。

実装

変換用の 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

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

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

以上です。