ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

QNo.4071969 XSLTで直下のテキストのみ取得する方法は?
質問者:yuka_102 いつも勉強させていただいております。
今回は質問をさせていただけないでしょうか。

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

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

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

そこで、■ここだけ出したい■の部分だけ出すにはどのように記述すれば良いでしょうか?
困り度:
  • すぐに回答を!
質問投稿日時:
08/06/03 13:20
この質問に対する回答は締め切られました。
最新から表示回答順に表示

回答

ANo.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>
回答者:himajin100000
種類:アドバイス
どんな人:一般人
自信:参考意見
回答日時:
08/06/03 15:49
この回答へのお礼この回答にお礼をつける(質問者のみ)

回答

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

もしそうだとすると DtPDataList の処理が終わった後に下層の要素も再帰的に実行をしようとして適用templateが無くて文字列が返ってくるっていうオチなんじゃないかな
回答者:SAYKA
種類:アドバイス
どんな人:一般人
自信:参考意見
回答日時:
08/06/03 15:29
この回答へのお礼この回答にお礼をつける(質問者のみ)
 
最新から表示回答順に表示