• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:テキストノードの文字列に一致した要素の取得(xPath)

XMLとxPathを使って特定要素のテキストを表示する方法について

このQ&Aのポイント
  • xml,xslを勉強している中で、xPathの指定がうまくできない状態です。特定の要素のテキストを表示する方法を教えてください。
  • 具体的には、XMLのartistのテキストノードが特定の文字列に一致する場合、その要素のtitleを表示したいです。
  • 既存のxPathでは、一致する要素だけでなく部分一致も選択してしまっています。正確な一致のみを選択するxPathの定義方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

選ばれた要素の空白を除いた長さが4であるかをチェックしてみてはいかがでしょう <xsl:for-each select = "descendant::artist[contains(text(),'cobu')]">   <xsl:if test="string-length( normalize-space( text() ) ) = 4" >     <xsl:value-of select ="text()" />:     <xsl:value-of select ="title" /><br/>   </xsl:if> </xsl:for-each> といった具合で ...

ques9999
質問者

お礼

回答、教授して頂きありがとうございます。 ご指摘の方法で、下記の用に定義したところ、データを取得できました。 <xsl:for-each select = "descendant::artist[contains(text(),'cobu') and (string-length( normalize-space( text() ) ) = string-length('cobu'))]"> 上記以外の方法で、xPath指定できないか、考えたいと思います。 ありがとうございました。

ques9999
質問者

補足

自己解決だと思うのですが、下記のように明記したらデータを 取得することができました。 *Mac FireFox3.5.2でのみの確認となりますが... <xsl:for-each select = "descendant::artist[normalize-space(text())='cobu']"> 他の方法で、定義する方法がありましたら、ご教授願います。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

<xsl:for-each select = "descendant::artist[normalize-space(text())='cobu']"> で IE6でも表示しましたよ

ques9999
質問者

お礼

検証して頂きありがとうございます。 normalize-spaceを意識していなかったので、 <xsl:for-each select = "descendant::artist[text()='cobu']"> と定義した場合、データをひっぱってくることができておりませんでした。 また、ひとつ勉強させて頂きました。 ご丁寧な返答ありがとうございました。

すると、全ての回答が全文表示されます。