こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

XSLTで直下のテキストのみ取得する方法は?

いつも勉強させていただいております。
今回は質問をさせていただけないでしょうか。

XSLTで下記のように記述します。
<xsl:value-of select="."/>

カレントが、DtPDataListの場合は
項目や内容などの、階層下の全てのテキストが出てしまいます。

<DtPDataList>■ここだけ出したい■
<DtDataTitle>
<DtTitleVal>項目</DtTitleVal>
<DtTitleVal>内容</DtTitleVal>
</DtDataTitle>
</DtPDataList>

そこで、■ここだけ出したい■の部分だけ出すにはどのように記述すれば良いでしょうか?

投稿日時 - 2008-06-03 13:20:46

QNo.4071969

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

15人が「このQ&Aが役に立った」と投票しています

回答(2)

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/DtPDataList">
<hoge><xsl:value-of select="text()" /></hoge>
<!--
http://www.w3.org/TR/xpath#location-paths
child::text() selects all text node children of the context node

ちなみに,このコードだと,
DtDataTitle要素のpreceding-siblingなtext nodeだけじゃなく
DtDataTitle要素のfollowing-siblingなtext nodeも含まれるので

もし,preceding-siblingなtextが欲しい場合は
preceding-sibling::text()でもtext()[1]でもお好きなように。

gooの仕様でURIっぽい文字列の前後にZERO WIDTH SPACEが埋め込まれるので多分このXSLTは整形式として認識されないから
理解して自分で書き直すか,テキストエディタで弄ってから使ってください

#どうでもいいが,XPathが 1 orginなのにはどうしても慣れんな

-->
</xsl:template>
</xsl:stylesheet>

投稿日時 - 2008-06-03 15:49:37

ANo.1

その DtPDataList を出す為のtemplate
<xsl:apply-templates />
(または select=".")
で呼び出してない?

もしそうだとすると DtPDataList の処理が終わった後に下層の要素も再帰的に実行をしようとして適用templateが無くて文字列が返ってくるっていうオチなんじゃないかな

投稿日時 - 2008-06-03 15:29:57

あなたにオススメの質問