xslのグループ化?

特に話題を問いません。お好きな話題をどうぞ。
返信
azu
アクティブユーザー
記事: 12
登録日時: 2005年11月17日(木) 21:19

xslのグループ化?

投稿記事 by azu » 2006年4月02日(日) 17:28

CMSDと離れた質問ですいません。
こんなことを実現したくて勉強しているのですが、可能かどうか教えて頂けますか?

コード: 全て選択

<?xml version="1.0" encoding="shift-jis"?>
<?xml-stylesheet type="text/xsl" href="sample10.xsl"?> 
 <testdate version="1.0" name="学習のためのサンプル">
  <items>
   <item name="google" keywords="検索サイト" href="http://www.google.co.jp/" />
   <item name="無印" keywords="趣味" href="http://www.muji.net/" />
   <item name="ナンバープレイス" keywords="趣味" href="http://www.gamedesign.jp/flash/numplace/numplace.html" />
   <item name="楽しいXML" keywords="XML,趣味" href="http://www6.airnet.ne.jp/manyo/xml/" />
   <item name="uniqlo" keywords="趣味" href="http://www.uniqlo.com/" />
   <item name="msn" keywords="検索サイト" href="http://www.msn.co.jp/home.armx" />
  </items>	
  <tags>
   <tag name="検索サイト" />
   <tag name="XML" />
   <tag name="趣味" />
  </tags>
</testdate>
こんなXMLを元にして下記のような出力をしたいと考えております。
ちなみにXMLは上のままで変更できないとして、XSLのみで。

コード: 全て選択

<?xml version="1.0" encoding="shift-jis"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja">
 <head>
  <meta http-equiv="Content-Type" content="text/html; charset=shift-jis" />
  <meta http-equiv="Content-Style-Type" content="text/css" />
  <title>学習のためのサンプル</title>
 </head>
 <body>
  <h1>学習のためのサンプル</h1>
   <div>
    <ul>
     <li><a href="#検索サイト">検索サイト</a></li>
     <li><a href="#XML">XML</a></li>
     <li><a href="#趣味">趣味</a></li>
    </ul>
   </div>
   <br />
   <h2>検索サイト</h2>
   <ul>
    <li><a href="http://www.google.co.jp/">googlo</a></li>
    <li><a href="http://www.msn.co.jp/home.armx">msn</a></li>
   </ul>
   <h2>XML</h2>
   <ul>
    <li><a href="http://www6.airnet.ne.jp/manyo/xml/"">楽しいXML</a></li>
   </ul>
   <h2>趣味</h2>
   <ul>
    <li><a href="http://www.muji.net/">無印</a></li>
    <li><a href="http://www.gamedesign.jp/flash/numplace/numplace.html">ナンバープレイス</a></li>
    <li><a href="http://www6.airnet.ne.jp/manyo/xml/">楽しいXML</a></li>
    <li><a href="http://www.uniqlo.com/">uniqlo</a></li>
   </ul>
  </body>
</html>
お忙しいところ変な質問ですいません。。
ちなみに下記まで理解しましたが、なかなか面白いですね。
勉強すればCMSDの理解にもつながるし。

コード: 全て選択

<?xml version="1.0" encoding="Shift_JIS"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
 <xsl:apply-templates  />
</xsl:template>

<xsl:template match="testdate">
 <h1>
  <xsl:value-of select="@name"/>
 </h1>
 <xsl:apply-templates select="items"/>
</xsl:template>

<xsl:template match="items">
 <xsl:value-of select="@name"/>
 <xsl:for-each select="item">
  <xsl:sort select="./@name" />
   <xsl:if test="@keywords='検索サイト'">
  <li><a><xsl:attribute name="href"><xsl:value-of select="@href"/></xsl:attribute><xsl:value-of select="@name"/></a></li>
   </xsl:if>
  </xsl:for-each>

</xsl:template>
</xsl:stylesheet>
勉強中なので基本に忠実だと思うんですけど^^;

webmaster
Site Admin
記事: 1447
登録日時: 2004年12月10日(金) 10:09

Re: xslのグループ化?

投稿記事 by webmaster » 2006年4月03日(月) 01:13

 こんにちは。:) webmasterです。

 可能かと思います。
 具体的なサンプルまで作っている時間が取れない為、考え方だけ…。

コード: 全て選択

<!-- tag要素の数だけループを回す -->
<xsl:template match="/testdate/tags/tag">

<!-- tag名を変数tagnameに格納 -->
<xsl:variable name="tagname" select="@name" />

<h2><xsl:value-of select="$tagname" /></h2>
<ul>
<!-- item要素のうち、keywords属性内にtagnameを含むものを選択 -->
<xsl:for-each select="/testdate/items/item[contains( @keywords, $tagname )]">
<li><a href="{@href}"><xsl:value-of select="@name" /></a></li>
</xsl:for-each>
</ul>

</xsl:template>
 試していないので、動かなかったらごめんなさい。
 考え方の方を参考にしてみて下さい。

返信