- - PR -
select=
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2002-11-15 16:14
現在MSXML3.0でXMLの勉強をしています。
apply-templatesの動作を確認しようと、以下のような記述をしました。 [XML]: <ルート要素> <子要素>最初の子要素のテキスト</子要素> <子要素>次の子要素のテキスト <孫要素>最初の孫要素のテキスト</孫要素> <孫要素>2番目の孫要素のテキスト</孫要素> </子要素> </ルート要素> [XSL]: <xsl:template match="/"> <xsl:apply-templates select="ルート要素/子要素"/> </xsl:template> <xsl:template match="子要素"> <xsl:value-of select="."/> </xsl:template> </xsl:stylesheet> 上記を用いて変換した結果、以下のようになりました。 ----------------------------------------------------------- 最初の子要素のテキスト次の子要素のテキスト 最初の孫要素のテキスト 2番目の孫要素のテキスト ----------------------------------------------------------- しかし、私が期待していたのは、こういう結果です。 ----------------------------------------------------------- 最初の子要素のテキスト次の子要素のテキスト ----------------------------------------------------------- そこでxslの <xsl:value-of select="."/> を <xsl:value-of select="./text()"/> にしてやると、期待通りの結果が得られました。 select="."はselect="./text()"と同じ意味だと思っていたのですが、 これはどう理解したらよいのでしょうか? |
|
投稿日時: 2002-11-16 14:58
>select="."はselect="./text()"と同じ意味だと思っていたのですが、
select="."は、カレントにある全てのタイプのノードを含みますってことです。 つまり、<孫要素>タグで囲まれるノードも、カレントノード(子要素)内の一部 を構成する要素であるから、中身を繋げた形になったわけです。 select="./text()"は、カレントノードの文字データを表すノードが対象になる 形になります。この場合、<孫要素>はカレントノードを構成する別のノードって いうことになるので、テキストノードとは違う次元になります。だから孫要素の 内容が抽出されなかったというわけです。私もテキストノード、アトリビュート ノード、コメントノードなどなど、XPathで用意されているさまざまな仕組みが 上手く使えてない口なので、頑張りまーす。 ※今度掲示板にXMLを書くときは、インデント付けてくれると見やすいっすよ。 |
|
投稿日時: 2002-11-22 17:05
ありがとうございます。
ちょっと調べなおしました。 .はself::node()の意味なんですね。 では http://www.atmarkit.co.jp/fxml/tanpatsu/10xslt/xslt02.html の >XSLTプロセッサが現在処理しているノードをカレントノードといい、 >XPathでは“.”と表現します。 >カレントノードの子テキストノードを取り出す場合、次のように表現できます。 というのは間違いでしょうか? |
|
投稿日時: 2002-11-23 13:52
>ちょっと調べなおしました。 >.はself::node()の意味なんですね。 というように、調べられた結果から言えば表現は合っていないですよね。 自分が読んでいない記事の内容が合っている/いないというのを書くのは 気が進まないんですがね・・・。本来この質問は、ライターさんにするの がいいと思いますよ。 (^^ ![]() |
1