- PR -

XSLTのロケーションパスにnode()を指定したのですが・・・

1
投稿者投稿内容
ibiyu
会議室デビュー日: 2003/07/08
投稿数: 2
投稿日時: 2003-07-08 18:42
どうしても理解できなかったので、お力をお借りいたしたく。

下記のようなXML文書があるとします。

<?xml version="1.0" encoding="Shift_JIS"?>
<document>
<report>wingtip</report>
<memo>2003</memo>
</document>

これをxalan2.5.1で下記stylesheetを使って変換しました。

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:strip-space elements="*"/>
<xsl:template match="document">
<html>
<xsl:value-of select="child::node()"/> <!-- (1) -->
</html>
</xsl:template>
</xsl:stylesheet>

結果は
<html>wingtip</html>
でした。document要素のchild軸の指定をしている(つもり)なのですが、
<html>wingtip2003</html>
にならないのはなぜですか?

(1)の部分を
<xsl:value-of select="self::node()"/>
にして実行すると、今度は
<html>wingtip2003</html>
になりました。
document要素のself軸を指定している(つもり)なのに
<html>wingtip</html>
にならないのはなぜですか?

よろしくお願いします。


[ メッセージ編集済み 編集者: ibiyu 編集日時 2003-07-08 18:43 ]
MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 2003-07-09 13:37
 Top > XML eXpert eXchange > XMLリンク集 > XML基本仕様
http://www.atmarkit.co.jp/fxml/links/indexpage/xmlspecs.html#xsl

7.6.1 xsl:value-of を用いたテキストの生成
http://www.infoteria.com/jp/contents/xml-data/REC-xslt-19991116-jpn.htm#value-of
この式を評価すると、string 関数の呼び出しを実行したかのように、

関数: string string(object?)
http://www.infoteria.com/jp/contents/xml-data/REC-xpath-19991116-jpn.htm#function-string
ノード集合内のノードのうち、ドキュメント順で最初のノードの文字列値を返して、ノード集合を文字列に変換する。

その型のノードの文字列値
http://www.infoteria.com/jp/contents/xml-data/REC-xpath-19991116-jpn.htm#dt-string-value
ルートノードの文字列値 は、ルートノードのすべての子孫テキストノードの文字列値をドキュメント順に連結したものである。
--------------------
仕様の目次を暗記しておくと、理解できていなくとも
あとで引く時に便利です。
ibiyu
会議室デビュー日: 2003/07/08
投稿数: 2
投稿日時: 2003-07-09 15:59
MMXさん。
回答ありがとうございました。

>ルートノードの文字列値 は、ルートノードのすべての子孫テキストノードの文字列値を
>ドキュメント順に連結したものである。

自分の持っている本にはそんなこと一言もふれてませんでした。
やはり、本家の仕様書をきちんと読まなくてはいけませんね。
1

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