OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

xslでの表示

  • すぐに回答を!
  • 質問No.127454
  • 閲覧数48
  • ありがとう数3
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 13% (21/151)

例えば

<title>タイトルA</title>
<P>no1</P>
<P>no2</P>
<P>no3</P>
<P>no4</P>
<title>タイトルB</title>
<P>no5</P>
<P>no6</P>
<P>no7</P>
<P>no8</P>

というようなxmlがあったとします。

xslを適用して、
タイトルA
no1
no2
no3
no4
タイトルB
no5
no6
no7
no8
と表示するにはどのようにすればよいのでしょうか?

<xsl:for-each select="//P">
 <P><value-of select="."/></P>
</xsl:for-each>

ではnoのみが表示され、タイトルが表示されず、また、

<xsl:for-each select="//title">
 <P><xsl:value-of select="."/></P>
 <xsl:for-each select="../P">
  <P><xsl:value-of select="."/></P>
 </xsl>
</xsl>

では、
タイトルA
no1
no2
no3
no4
no5
no6
no7
no8
タイトルB
no1
no2
no3
no4
no5
no6
no7
no8

となってしまいます。
通報する
  • 回答数1
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.1
レベル8

ベストアンサー率 72% (26/36)

 だいぶ経ってしまっているので、回答が役に立つのか分かりませんが、
一応書いておきます。

 正確な意図が分かりにくいので、この回答が見当違いかもしれません。


<xsl:for-each select="//title">
 <P><xsl:value-of select="."/></P>
 <xsl:for-each select="../P">
  <P><xsl:value-of select="."/></P>
 </xsl>
</xsl>

と記述しようとしている場所に

<xsl:apply-templates select="//title | //P"/>

と記述しておいて、

<xsl:template match="title">
 <!-- title要素に対する処理 -->
</xsl:template>

<xsl:template match="P">
 <!-- P要素に対する処理 -->
</xsl:template>

というテンプレートを呼び出すようにすれば良いのでは?

 もちろん、apply-templatesでtitle要素とP要素を区別しない点が
意図と異なるかもしれませんが。


 この場合のデータ構造があまり良くないので、例えば

<Group>
 <title>タイトルA</title>
 <P>no1</P>
 <P>no2</P>
 <P>no3</P>
 <P>no4</P>
</Group>
<Group>
 <title>タイトルB</title>
 <P>no5</P>
 <P>no6</P>
 <P>no7</P>
 <P>no8</P>
</Group>

のようにデータ構造をより良いものにしてから、
という手もあります。
こうするとだいぶ処理が楽になります。


 最後に、余計な忠告かもしれませんが、
xsl:for-eachにこだわり過ぎないで柔軟に考えた方が良いのでは、
と私は思います。
-PR-
-PR-
このQ&Aで解決しましたか?
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ