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>
以上です。