- - PR -
XSLTの処理を教えてください
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 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がよく分かりません。 教えていただけないでしょうか? よろしくお願いいたします。 |
|
投稿日時: 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-05-19 23:51
MMXさん返答ありがとうございました。
だんだん理解できつつあります。 |
1