- PR -

XSLTの処理を教えてください

1
投稿者投稿内容
チルドレン
会議室デビュー日: 2004/02/13
投稿数: 8
投稿日時: 2004-05-18 00:40
以下のXSLT処理の違いについて教えていただきたいのですが。

=========XML=========
<catalog>
<book>DOM
<page>200</page>
</book>
</catalog>


=========XSLT=========
<xsl:template match="/">
<xsl:apply-templates select="catalog/book"/>
</xsl:template>

<xsl:template match="catalog/book">
<xsl:value-of select="child::node()"/>
<xsl:value-of select="self::node()"/>
</xsl:template>

@child::node()とAself::node()の違いなのですが、
出力結果は@の場合"DOM"、Aの場合"DOM200"となります。

@について私の考えているところでは、node()は全てのノードを意味し
catalog/book/child::node()といった場合、bookの子ノードである
テキストノード:DOM、要素ノード:<page>が処理され、
要素ノードについてはその子孫にあるテキストノードを連結したものが
抜き出され、その結果DOM200と出力されるものと思っていました。

また、次の違いも教えていただけないでしょうか?
B<xsl:value-of select="node()"/>
C<xsl:value-of select="text()"/>
この場合ですと、BCとも"DOM"と表示されます。
Cはテキストノードを取得するものですから、理解できるのですが
Bがよく分かりません。


教えていただけないでしょうか?
よろしくお願いいたします。
MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 2004-05-18 10:34
child::node()は
DOM、<page>
self::node()は
<book>
です。
count関数でノードセットのノード数を表示してみたり
copy-of でノードセットそのものを吐き出せば違いがわかります。
(XSLTデバッグのコツ)

<xsl:value-of select="child::node()"/>がよく分かりません。
7.6.1 xsl:value-of を用いたテキストの生成
http://www.infoteria.com/jp/contents/xml-data/REC-xslt-19991116-jpn.htm#value-of
この式を評価すると、string 関数の呼び出しを実行したかのように、結果のオブジェクトを文字列に変換する。

value-of node() → string(node()) ということ。
改行の少ない仕様書の文ですが、前後ゆっくり読むとわかるでしょ。
改行を多めに入れるだけでも、読みやすくなります。

ZVON > Tools > X Lab: value-of
http://www.zvon.org:9001/saxon/cgi-bin/XLab/XML/extras.html?stylesheetFile=XSLT/valueOf.xslt&lang=eng
でも試せるかも、変な式を入力すると、飛ぶでしょう。

[ メッセージ編集済み 編集者: MMX 編集日時 2004-05-18 11:00 ]
チルドレン
会議室デビュー日: 2004/02/13
投稿数: 8
投稿日時: 2004-05-19 23:51
MMXさん返答ありがとうございました。
だんだん理解できつつあります。
1

スキルアップ/キャリアアップ(JOB@IT)