ぽっくるのITざっき

IT関連技術についての覚え書きです。不定期更新です。

【XSLT】ノードをコピーするには③

2007-12-25 00:52:04 | Weblog
xsl:copyを使用して、ソース文書の内容を変更しつつコピーすることができる例を以下に示す。

以下は、ソース文書内容をそのままコピーするスタイルシートである。

ソース文書:
<?xml version="1.0">
<First order="1st">
  <Second order="2nd">2nd element</Second>
</First>


XSLTスタイルシート:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:output method="xml" encoding="UTF-8"/>
  <xsl:template match="node()|@*">
    <xsl:call-template name="copy"/>
  </xsl:template>
  <xsl:template name="copy">
    <xsl:copy>
      <xsl:attribute name="count">1</xsl:attribute>
      <xsl:apply-templates select="node()|@*" />
    </xsl:copy>
  </xsl:template>
</xsl:stylesheet>


変換結果:
<?xml version="1.0" encoding="UTF-8">
<First count="1" order="1st">
  <Second count="1" order="2nd">2nd element</Second>
</First>


xsl:copy要素内容にxsl:attributeによる属性追加要素を記述すると、ソース文書の各要素にcount属性が追加されるのがわかる。


【XSLTプロセッサ】XALAN 2.7.0 / msxsl
【OS】Windows XP Professional Edition + SP2