XSLを書き始めたばかりでつまずいています。
下記のようなXMLファイルがあるとして…
===
<Menulist>
<Menu No="1" Item="3" Time="100"/>
<Menu No="2" Item="1" Time="60"/>
<Menu No="3" Item="1" Time="120"/>
<Menu No="4" Item="2" Time="10"/>
</Menulist>
<Setlist>
<Set No="1">
<Set_name Name="Push Up" />
<Set No="2">
<Set_name Name="Run" />
<Set No="3">
<Set_name Name="Swim" />
</Setlist>
=========
ここで、XSLを用いてMenulistのMenuのItemが1の時には、SetlistのSet Noが1の"PushUP"を取り出して、Menu Noとともに、Menuの数だけ表示したいのです。
こうしたあるノードのエレメントの値を使って、別のノードのエレメントの値を取得する方法をご教示ください。
No.1ベストアンサー
- 回答日時:
質問の中の XML が整形式 XML 文書(※1)になってないから、適当に、修正しておいたよ(↓xmldoc.xml)。
(※1 整形式 XML 文書)
http://ja.wikipedia.org/wiki/Extensible_Markup_L …
[xmldoc.xml]
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="xslt.xsl"?>
<RootNode>
<Menulist>
<Menu No="1" Item="3" Time="100"/>
<Menu No="2" Item="1" Time="60"/>
<Menu No="3" Item="1" Time="120"/>
<Menu No="4" Item="2" Time="10"/>
</Menulist>
<Setlist>
<Set No="1"><Name>Push Up</Name></Set>
<Set No="2"><Name>Run</Name></Set>
<Set No="3"><Name>Swim</Name></Set>
<Set No="4"><Name>Squat</Name></Set>
</Setlist>
</RootNode>
たぶん html 文書を出力したいんだとおもうけど、html タグかくとごちゃごちゃして、ポイントがわかりづらくなるからテキスト出力にするね。HTML 出力したいときは、必要なところに html タグ追加して完成させてね。
[xslt.xsl]
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!-- 出力が html のときは↓も↑に含める
xmlns="http://www.w3.org/1999/xhtml" -->
<xsl:output
method="text"
encoding="utf-8"
media-type="text/plane"/>
<!-- 出力が html のときは↓を使う。
doctype-public="-//W3C//DTD XHTML 1.1//EN"
doctype-system="http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"
media-type="application/xhtml+xml"
-->
<xsl:template match="/">
<xsl:apply-templates select="RootNode/Menulist/Menu" />
</xsl:template>
<xsl:template match="Menu">
<xsl:variable name="no"><xsl:value-of select="@No" /></xsl:variable>
<xsl:value-of select="$no" />
<!-- ↓出力が html のとき xsl:text 要素はらない -->
<xsl:text> </xsl:text>
<xsl:value-of select="/RootNode/Setlist/Set[@No=$no]/Name" />
<!-- ↓出力が html のとき xsl:text 要素はらない -->
<xsl:text>
</xsl:text>
</xsl:template>
</xsl:stylesheet>
xslt だけど、とりあえず下のタグだけ覚えておけば、簡単なのはかけるようになるから、気が向いたらしらべてみて!
- stylesheet
- output
- template
- apply-templates
- value-of
- variable
- element
- attribute
- copy
ちょっと複雑なことする場合は、これが必要になるかも。
- for-each
- sort
- call-template
- with-param
- param
- copy-of
- if
- choose
- when
- otherwise
正典
http://www.w3.org/TR/xslt
関数型の美しさに魅了されると手続型のちまちまがだるだるでいやいやだから覚悟しておいて!
ありがとうございます!!
元のXML(…質問するにしてはいい加減な書き方でした…反省…)までちゃんと添削いただき、且つ、具体的に教えていただきありがとうございました!
それから、学習アドバイスもありがとうございます。参考にさせていただきます。
早速、TEXT出力で実験してみたところ、
1 Push Up
2 Run
3 Swim
4 Squat
と出力されてしまいました。そこで、いただいたコードを指でなぞりながら考えること数分、
<xsl:variable name="no"><xsl:value-of select="@No" /></xsl:variable>
を
<xsl:variable name="no"><xsl:value-of select="@Item" /></xsl:variable>
と書き換えることで、
3 Swim
1 Push Up
1 Push Up
2 Run
と、期待していた出力を得ることが出来ました!!
なんだかもやもやっとしていたのが「ぱっ」と明るくなった感じです。(^^)
今後とも宜しくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- HTML・CSS 書籍を見つつサイト造りの練習をしているのですが、見た目が一致しません 2 2022/11/28 15:00
- その他(プログラミング・Web制作) Pythonで会員サイトの自動ログイン ID Nameがない 1 2022/12/16 02:09
- PHP 共通の処理をまとめる方法がわからないのでアドバイスお願いします。 1 2022/12/19 20:20
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- Excel(エクセル) vba シート名の一覧を2列に分けるには 5 2023/04/24 08:56
- サーバー WindowsでApache が起動しない 1 2022/11/29 12:21
- PHP コメント機能に返信欄を矢印で追加したい 1 2022/05/09 21:17
- その他(プログラミング・Web制作) バッチファイルでPCのモデル名を取得したい 1 2022/03/31 10:58
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) 特定の文字を含むシートだけマクロ処理をしたい 1 2023/05/22 01:43
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
XSLで、XMLの空タグを制御したい。
-
ノードの並び替え
-
タグの有無の判定
-
xslでの最小値、最大値の取得
-
xmlのテキストにリンクを張りた...
-
XMLのHTMLへの変換 (初心者)
-
CPUの考え方を教えてください ...
-
XMLで要素が記述された順番に意...
-
バッチファイルでテキストファ...
-
昔Winnyってありましたけど、あ...
-
あせんうぶり言語
-
VB6でXMLを作成しているのです...
-
SNMP リンクダウンとノードダ...
-
あるノードリストに、特定の名...
-
HTTPステータス 404 - There is...
-
コンテキストメニュークリック...
-
Listからのnull要素を削除方法は?
-
ルート要素ノードが2個ある場合?
-
ノードとは
-
このエラー、何とかなりません...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
XSLで、XMLの空タグを制御したい。
-
タグの有無の判定
-
XSLでXMLデータをタブ区切りデ...
-
XSLTで固定長データファイルを...
-
XSL中の改行、タブを無効にした...
-
xmlのテキストにリンクを張りた...
-
重複するものを消したい
-
XSLTがブラウザで表示されません。
-
うまく表示されない
-
文字列の取得
-
xsl:param要素をxsl:templateの...
-
value-ofの値を属性値とするには
-
XMLをXSLを使いHTMLに変換した...
-
XMLから指定テキストのみを抜き...
-
ある文字列を含むノードが存在...
-
VBAからxml・スタイルシートを...
-
xsl、xpath式の書き方について
-
XSLで特定のタグだけを出力する...
-
XSL内でJavaScriptを記述し、Ja...
-
XSLTで直下のテキストのみ取得...
おすすめ情報