• 締切済み

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

いつも勉強させていただいております。 今回は質問をさせていただけないでしょうか。 XSLTで下記のように記述します。 <xsl:value-of select="."/> カレントが、DtPDataListの場合は 項目や内容などの、階層下の全てのテキストが出てしまいます。 <DtPDataList>■ここだけ出したい■ <DtDataTitle> <DtTitleVal>項目</DtTitleVal> <DtTitleVal>内容</DtTitleVal> </DtDataTitle> </DtPDataList> そこで、■ここだけ出したい■の部分だけ出すにはどのように記述すれば良いでしょうか?

みんなの回答

回答No.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>

  • SAYKA
  • ベストアンサー率34% (944/2776)
回答No.1

その DtPDataList を出す為のtemplate <xsl:apply-templates /> (または select=".") で呼び出してない? もしそうだとすると DtPDataList の処理が終わった後に下層の要素も再帰的に実行をしようとして適用templateが無くて文字列が返ってくるっていうオチなんじゃないかな

関連するQ&A