2005年03月27日(日)更新 |
■XMLデータのノードのコピー
たけち: 今回は、xsl:copy要素を勉強しよう。 さらら: xsl:copy? 前回教えてもらったxsl:copy-ofとは違うの? たけち: うん。xsl:copy-ofは、変換前のXMLデータの要素を、その子要素や属性を含めて、そのまま変換後のXMLデータやHTMLデータなどの要素として出力するんだったね。 さらら: えぇ。 たけち: xsl:copyは、カレントノードだけをコピーするんだよ。 さらら: あっ、そうなの。 たけち: じゃあまず、xsl:copyの書き方をみておこうね。そのあとで使い方を少し見てみるね。 さらら: はい。 |
■xsl:copyの書き方
■サンプルXMLデータ: flowers.xml
さらら: use-attribute-setsってなぁに。。。 たけち: えっとね。。。。今回は気にしないでおいて。あとできちんと学んでみたいからね。 さらら: うっ、うん。。。じゃあ、copyってどう使うのかしら? たけち: そうだね。それじゃあ、簡単な例でxsl:copyの使い方をみてみようね。 さらら: うん。 たけち: 前回と同じフライトデータの例でやってみるね。 |
【flights.xml】
※【flights.xml】 XMLファイル: フライトスケジュールのデータ |
■xsl:copyを使ったスタイルシート例
さらら: xsl:copy-ofでやつた例と同じXMLデータね。 たけち: うん。で、ここでは、xsl:copy-ofでやった結果と同じ表示をするXSLTスタイルシートを作ってみよう。それで、xsl:copy-ofとxsl:copyの使い方の違いも分かるしね。 さらら: あっ、そうね。 たけち: じゃあ、さっそくスタイルシートを先に見てもらおうかな。 |
【flights.xslt】
※【flights.xslt】 XSLTファイル: xsl:copy要素を含んでいます |
さらら: xsl:copy要素でまるごとコピーしたときとは、ずいぶん違うわね。 たけち: そうだね。少し詳しく見てみようね。 さらら: はい。 たけち: コピーをしているのは次のテンプレート部分だね。 |
※xsl:copy要素を使ってtable要素以下をコピーしているテンプレート部分 |
たけち: table要素とそれ以下の要素ノードについては、<xsl:template match="table | tr | th | td">と<xsl:apply-templates />とで選択しているよね。 さらら: はぁ〜。。。match="table | tr | th | td"って、tableか、trか、thか、td要素ノード、ってことなのよね。 たけち: そうそう。 さらら: なるほど。。。<xsl:apply-templates />が無いと、table要素がコピーされるだけなのね。 たけち: そうなんだね。 |
さらら: じゃあ。<xsl:for-each select="@*">から</xsl:for-each>では、何をしているの? たけち: それぞれの要素ノードの属性ノードをコピーしているんだよ。 さらら: えっ? たけち: あっ、ごめん。ちゃんと言ってなかったけど、xsl:copyではカレントノードだけをコピーするものだから、たとえば、要素ノードの場合、その属性ノードはコピーしないんだよ。 さらら: あっ、そうなんだ。。。 たけち: <xsl:for-each select="@*">で、カレントノードのすべての属性についてxsl:copyしているんだ。 |
■flights.xmlをIEで表示する
さらら: スタイルシートの内容はだいたい分かったから、これでちゃんと表示できるか、やっぱり見てみたいわ。 たけち: そうだね。いつものようにXLSTファイルを適用して、IEて表示してみよう。 さらら: えぇ。 |
フライトデータのXMLファイル flights.xml(上記説明のXSL適用)
■flights.xmlをIEで表示
さらら: なるほどね。だいたいの使い方がイメージできたけど。。。 たけち: う〜ん。そうだね。やっぱり、いくつかスタイルシートを作ってみないとね。じゃあ、今回はここまでね。 さらら: はい。ありがとう。 →さらに続きます。・・・ (^ ^; |