

xml,xslを勉強しているのですが、xPathの指定が上手く定義できない状態です。ご教授の程お願い致します。
下記がxml,xslです
<!-- アーティスト名とタイトルを明記したxml -->
-- music.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="music.xsl"?>
<music>
<artist>
Ciel
<title>wake</title>
</artist>
<artist>
Flew
<title>BANG</title>
</artist>
<artist>
cobu // (1)
<title>calling</title>
</artist>
<artist>
cobukure
<title>dammy</title>
</artist>
</music>
<!-- 条件に一致したアーティスト名、タイトルを表示するxsl -->
-- music.xsl
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<head><title></title></head>
<body>
<xsl:for-each select = "descendant::artist[contains(text(),'cobu')]"> // (2)
<xsl:value-of select ="text()" />:
<xsl:value-of select ="title" /><br/>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
//上記の処理結果
cobu :calling
cobukure :dammy
//希望する処理結果
cobu :calling
・質問内容
XMLのartistのテキストノード=cobuをxsl:for-eachでselectして、
titleのcallingを表示したい
本、サイトなどで調べて、
descendant::artist[contains(text(),'cobu')]のxPathまでは、
導けたのですが、この場合は、cobuを含むので、
artistのテキストノード=cobukureもselectされdummyが表示されてしまいます。
処理結果、
cobu :callingのみselectできるxPathの定義をご教授の程お願い致します
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>
といった具合で ...
この回答への補足
自己解決だと思うのですが、下記のように明記したらデータを
取得することができました。
*Mac FireFox3.5.2でのみの確認となりますが...
<xsl:for-each select = "descendant::artist[normalize-space(text())='cobu']">
他の方法で、定義する方法がありましたら、ご教授願います。
回答、教授して頂きありがとうございます。
ご指摘の方法で、下記の用に定義したところ、データを取得できました。
<xsl:for-each select = "descendant::artist[contains(text(),'cobu') and (string-length( normalize-space( text() ) ) = string-length('cobu'))]">
上記以外の方法で、xPath指定できないか、考えたいと思います。
ありがとうございました。
No.2
- 回答日時:
<xsl:for-each select = "descendant::artist[normalize-space(text())='cobu']">
で IE6でも表示しましたよ
検証して頂きありがとうございます。
normalize-spaceを意識していなかったので、
<xsl:for-each select = "descendant::artist[text()='cobu']">
と定義した場合、データをひっぱってくることができておりませんでした。
また、ひとつ勉強させて頂きました。
ご丁寧な返答ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript switch文のswitch(n)の部分を複数の値にするか、if文に変えてほしいです。 1 2022/07/27 17:18
- JavaScript セレクトボックスを2つ設けて選択して初めてメッセを表示 1 2022/07/27 12:15
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- PHP php ログイン 1 2022/11/01 00:24
- HTML・CSS 私の能力からして間違っていないような気がします。 4 2022/09/30 13:24
- HTML・CSS 書籍を見つつサイト造りの練習をしているのですが、見た目が一致しません 2 2022/11/28 15:00
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- JavaScript HTMLでJavaScriptを使ってパスワードの強化判定のプログラムを作成しています。 一通り作っ 2 2022/10/19 01:41
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
xmlから吐き出したhtmlデータの...
-
XSLスタイルシートについて
-
XMLとXSLTでリンクを張る方法
-
タグを置き換える
-
スマートなxsltの記述方法
-
xmlからの表示
-
XSLでXMLデータをタブ区切りデ...
-
XSLTにてタグ名を取得する方法
-
ルート要素ノードが2個ある場合?
-
PHPを使ったDOMの操作で兄弟ノ...
-
C言語のプログラムを教えてくだ...
-
DOSコマンドラインからxmlファ...
-
サイトマップの作り方。
-
JavaScriptを使うとXMLで実体参...
-
XML::LibXMLのfindnodes()で、...
-
xmlの初歩の初歩の質問ですが
-
質問
-
2つの行動の違い
-
属性リスト宣言
-
VB6.0でDOMを使用して...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
タグの有無の判定
-
XSLで、XMLの空タグを制御したい。
-
XMLをXSLを使いHTMLに変換した...
-
XMLとXSLTでリンクを張る方法
-
XSL中の改行、タブを無効にした...
-
ノードの並び替え
-
xmlのテキストにリンクを張りた...
-
XSLTのtemplateタグで複数の名...
-
XSLでノードの順番取得
-
xslでの最小値、最大値の取得
-
XSLTにてタグ名を取得する方法
-
重複するものを消したい
-
xmlから吐き出したhtmlデータの...
-
XSLTで固定長データファイルを...
-
<xsl:apply-templates />単独
-
簡単なことだと思うんですが・・・
-
XSLTがブラウザで表示されません。
-
スタイルシートを使用したXM...
-
XSL内でJavaScriptを記述し、Ja...
-
XML,XSL,JavaScriptの連携
おすすめ情報