![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
XMLをXSLでHTMLを生成しています。
変数$whereにある店の部分名を入力して
その店の扱う商品を表示したいと思っています。
しかし、以下の例だと
チョコレート
本
本
うめぼし
のようになってしまいます。
チョコレート
本
うめぼし
のように表示するにはどうすればよいでしょうか?
ご教授ください。
XMLが以下のようになっています。
()は要素の中身
list
item
title(チョコレート)
value(200円)
shops
shop(○○ストア)
shop(スーパー△△)
shop(駄菓子屋□□)
item
title(本)
value(1000円)
shops
shop(○○ブックス)
shop(△△百貨店)
shop(スーパー△△)
item
title(うめぼし)
value(100円)
shops
shop(スーパー○○)
shop(△△百貨店)
shop(通販○○)
list
そしてXSLは
<xsl:apply-templates select="list/item/shops">
で飛ばして
<xsl:template match="shops">
<xsl:for-each select="shop">
<xsl:if test="contains(.,$where)">
<xsl:value-of select="../../title[not(.=preceding::title)]"/>
</xsl:if>
</xsl:for-each>
</xsl:template>
No.1ベストアンサー
- 回答日時:
テストケースの作り方が悪い。
再現しないんで何がいいたいか伝わらないよ(笑)pop-bombさんのいいたそうなことを予測します。(外れるかもしれない)
うまく行くかも自信ない
====================================
以下のようなXMLファイルを考える
#gooのシステムの都合上,well-formedじゃなくなるかもしれないけど,それはgooのせいです。(空白に良く似た文字が挿入されることが多いので
良く探してください)
#まぁわかるよね,ってことで,その時は修正してください
<?xml version="1.0" encoding="UTF-8"?>
<list>
<item>
<title>チョコレート</title>
<value>200円</value>
<shops>
<shop>○○ストア</shop>
<shop>スーパー△△</shop>
<shop>駄菓子屋□□</shop>
</shops>
</item>
<item>
<title>本</title>
<value>1000円</value>
<shops>
<shop>○○ブックス</shop>
<shop>△△百貨店</shop>
<shop>スーパー△△</shop>
<shop>スーパー××</shop>
</shops>
</item>
<item>
<title>うめぼし</title>
<value>100円</value>
<shops>
<shop>スーパー○○</shop>
<shop>△△百貨店</shop>
<shop>通販○○</shop>
</shops>
</item>
</list>
このとき,本を販売する,異なるスーパーが二つ以上存在するようにしたことに注意。
ここで,以下のXSLTを適用すると
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<data>
<xsl:apply-templates select="list/item/shops" />
</data>
</xsl:template>
<xsl:template match="shops">
<xsl:for-each select="shop">
<xsl:if test="contains(.,'スーパー')">
<li><xsl:value-of select="../../title" /></li>
</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
=========================
<data>
<li>チョコレート</li>
<li>本</li>
<li>本</li>
<li>うめぼし</li>
</data>
===========================
という出力結果が得られる。
($whereは面倒くさいのでリテラルで置き換えました。
また、この要素がsiblingと等しくないのが常に成り立つのは明らかなので省略。)
しかし、これは「本」が重複してしまっているので
<data>
<li>チョコレート</li>
<li>本</li>
<li>うめぼし</li>
</data>
としたい。
==========================
そこで
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<data>
<xsl:apply-templates select="list/item/shops/shop[contains(text(),'スーパー')]/../../title" />
</data>
</xsl:template>
<xsl:template match="title">
<li><xsl:value-of select="text()" /></li>
</xsl:template>
</xsl:stylesheet>
というXSLTを作成し、適用したところ,
期待する結果が得られた。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 英語 下記の英語は正しいですか? 2 2022/07/04 16:38
- PHP アコーディオンPHPが上手くいかない 3 2022/07/15 16:29
- Perl RSSにdiv,ul classを付けたいのですがどのようにつけるのかわからないです 2 2022/03/28 01:53
- JavaScript 中百舌鳥駅と深井駅を入れ替えて選択しても同じ挙動にしたいです。 2 2022/06/24 18:45
- PHP コメント機能に返信欄を矢印で追加したい 1 2022/05/09 21:17
- JavaScript 1度きりではなく、繰り返し、挙動が変わるようにしていただきたいです。 1 2022/07/03 15:50
- PHP DBのハッシュ化したパスワードをpassword_verifyで戻し照合したのですが上手く行きません 2 2023/02/06 13:24
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- 英語 このHowの使っている意味と答え方を教えてください。 2 2022/10/29 11:34
- 英語 距離の聞き方 2 2023/04/01 23:19
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
XSLTがブラウザで表示されません。
-
XSL中の改行、タブを無効にした...
-
スタイルシートを使用したXM...
-
XSL内でJavaScriptを記述し、Ja...
-
XMLから指定テキストのみを抜き...
-
東芝のDynabookなのですがアン...
-
CPUの考え方を教えてください ...
-
UTF-8でエンコーディングとはど...
-
Access VBAでXMLが読み込めない
-
ルート要素ノードが2個ある場合?
-
コンテキストメニュークリック...
-
メモリのセクションに関して
-
xmlファイルが上手にHTMLに変換...
-
SNMP リンクダウンとノードダ...
-
XMLで要素が記述された順番に意...
-
XSLT
-
VB6でXMLを処理するには
-
複数のマックPCによる数値計算...
-
eclipseへのxmlファイル追加
-
XPathで途中に名前空間が設定さ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
タグの有無の判定
-
XSLで、XMLの空タグを制御したい。
-
スタイルシートを使用したXM...
-
XMLのHTMLへの変換 (初心者)
-
ノードの並び替え
-
XSL内でJavaScriptを記述し、Ja...
-
xmlのテキストにリンクを張りた...
-
xml→htmlへの変換&ページ分割...
-
空かスペースを認識させること...
-
XSLTにてタグ名を取得する方法
-
XMLとXSLTでリンクを張る方法
-
XSL中の改行、タブを無効にした...
-
重複するものを消したい
-
xslでの最小値、最大値の取得
-
スタイルシートについて
-
■XSLT■固定文字を使ったループ...
-
javaのTransformerでエラー
-
for-eachが上手くいきません
-
XMLデータを動的に使用する
-
XSLTで固定長データファイルを...
おすすめ情報