Dreamweaver TechniqueJAVA Script サンプル | CSS sample | JAVA Applet sample | Flash Sample
HTML4.0 riference | DynamicHTMLXHTML | XML sample | XSLT sample | RIKO's ASP Trial

要素ノードをコピーする

■ コピー

このサンプルは、出力されるソースからカレントノードをコピーして、同じ名前のノードを生成するものです。<xsl:copy>テンプレートの内容</xsl:copy>のように記述します。xsl:copy酔うその内容は、生成されるノードの属性や子に適用するテンプレートです。1個のXSLファイルの中で、同じ内容を何度も表示したいとき、<xsl:value-of>要素を使って、同じコードを何回も記述するより、コピーしたほうが手っ取り早いかもしれません。

copy1.xml

 

copy1.xsl

<?xml version="1.0" encoding="Shift_JIS"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<html lang="ja">
<head><title>copy1</title></head>
<body>
   <div><xsl:apply-templates select="全体" /></div>
</body>
</html>
</xsl:template>

<xsl:template match="全体">
   <xsl:for-each select="情報">
      <xsl:copy>
         <div><xsl:apply-templates /></div>
      </xsl:copy>
   </xsl:for-each>
</xsl:template>
</xsl:stylesheet>

 

もし<xsl:for-each select="情報"><div><xsl:copy /></dic></xsl:for-each> のように「情報要素そのもの」をコピーするように書くと、カレントノードの「情報」要素ノードと同じ名前のノード自体が生成・表示されます。

xsl:copy要素では、カレントノードの属性や子は自動的にはコピーされません。仮にXMLファイル中の「住所」要素ノードをカレントノードに指定してxsl:copy要素を使った場合、「住所」の子要素「会社」要素ノードや「氏名」要素の「年齢」属性ノードはコピーされません。

すべてのテキストノード、つまりtext( )に対してコピーするよう記述すると、テキスト部分がすべてコピーされます。

要素ノードをコピーするとき、,xsl:copy use-attribute-sets="属性セットの名前">のように書くと、属性セットの内容もコピーすることができます。

xsl:call-templates要素と組み合わせて使うと、xsl:copy要素でコピーされたノードをテンプレートとして呼び出すこともできます。

■ 注意

 

<<<戻る

R HOUSE | RIKO's Trial Page | Shirley's Pettit Case | Shirley's i-box | Shirley's little box