C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: XSLで特定の値を表示するには?


(過去ログ 75 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■44154 / inTopicNo.1)  XSLで特定の値を表示するには?
  
□投稿者/ シロ (5回)-(2009/11/30(Mon) 22:11:37)

分類:[XML] 

XSLのことで質問があります。
XSLでhtml形式に整形してulリストで表示するようなことをしてみました。

<!--XMLサンプル 今回はC#のXMLドキュメントを使わしてもらいます-->
<doc>
 <assembly>
  <name>MySystem</name>
 </assembly>
 <members>
  <member name="T:MySystem.Game.Tramp">
   <summary>
トランプ
   </summary>
  </member>
  <member name="T:MySystem.Game.Card">
   <summary>
カード
   </summary>
  </member> 
  ・
  ・
  ・
 </members>
</doc>

<!--変換用XSL一部抜粋-->
<xsl:template match="members">
 <ul>
 <xsl:apply-templates select="member"/>
 </ul>
</xsl:template>
<xsl:template match="member">
 <ul>
 <xsl:value-of select="@name"/>
 </ul>
</xsl:template>

上のようなXSLでXMLのデータをリストに変換することはできました。
このようなリストを作って表示したあとが質問の内容です。

・T:MySystem.Game.Tramp
・T:MySystem.Game.Card
  ・
  ・

上のようなリストの値をクリックしてその子ノードの値をXSLでまた処理したいのですがどのようにすればいいでしょうか?

考えているのはxsl:ifに<li>タグの内容を渡す事なのですが、

それだと処理前なので出来ないなと思い質問させてもらいました。

引用返信 編集キー/
■44166 / inTopicNo.2)  Re[1]: XSLで特定の値を表示するには?
□投稿者/ 魔界の仮面弁士 (1401回)-(2009/12/01(Tue) 09:40:05)
No44154 (シロ さん) に返信
> 上のようなリストの値をクリックしてその子ノードの値をXSLでまた処理したいのですがどのようにすればいいでしょうか?

子ノードに対する処理というものが、どのような XML をどのように変換するものなのか明らかにされていませんが、
いずれにせよ、HTML に対するクリック動作であることから、JavaScript もしくは JScript による制御が必要かと思います。

li 要素に onclick 属性を割り当て、そこに XSLT による変換処理を組み込んでみてください。

もしくは、最初からすべての子ノードを変換しておき、それを style="display:none" で非表示にしておいて、
クリック時に .runtimeStyle.display を修正して表示させる、という方法もあるかと思います。
これは、下記の webdev.xml, list.js, list.xsl で使われている方法です。
http://msdn.microsoft.com/ja-jp/library/dd296835.aspx

# 古いサンプルなので、xsl の名前空間が XSLT 1.0 勧告版の http://www.w3.org/1999/XSL/Transform ではなく、
# ワーキングドラフト版である http://www.w3.org/TR/WD-xsl によるサンプルなっています。適宜読み替えてください。
引用返信 編集キー/
■44525 / inTopicNo.3)  Re[2]: XSLで特定の値を表示するには?
□投稿者/ シロ (6回)-(2009/12/10(Thu) 22:05:55)
No44166 (魔界の仮面弁士 さん) に返信
> ■No44154 (シロ さん) に返信
>>上のようなリストの値をクリックしてその子ノードの値をXSLでまた処理したいのですがどのようにすればいいでしょうか?
> 
> 子ノードに対する処理というものが、どのような XML をどのように変換するものなのか明らかにされていませんが、
> いずれにせよ、HTML に対するクリック動作であることから、JavaScript もしくは JScript による制御が必要かと思います。
> 
> li 要素に onclick 属性を割り当て、そこに XSLT による変換処理を組み込んでみてください。
> 
> もしくは、最初からすべての子ノードを変換しておき、それを style="display:none" で非表示にしておいて、
> クリック時に .runtimeStyle.display を修正して表示させる、という方法もあるかと思います。
> これは、下記の webdev.xml, list.js, list.xsl で使われている方法です。
> http://msdn.microsoft.com/ja-jp/library/dd296835.aspx
> 
> # 古いサンプルなので、xsl の名前空間が XSLT 1.0 勧告版の http://www.w3.org/1999/XSL/Transform ではなく、
> # ワーキングドラフト版である http://www.w3.org/TR/WD-xsl によるサンプルなっています。適宜読み替えてください。

魔界の仮面弁士さま、ありがとうございます。

javascriptをまったく使ってなかったせいで納得するのに時間がかかりました。

サンプルのコードはTreeViewをXML+XSL+Javascriptで実装するようなものですね。
これを利用してみようかと思います。

ちなみにliタグにonclick属性を割り当てて変換する方法は

<xsl:template match="変えるノード">
 <li>
  <xsl:attribute name="onclick">
  <!--chirdnodeTrans:子ノードを取得してXSLを適用させる独自の関数-->
  <!--idは変えるノードを区別するための一意の値(そのときによって変える)-->
chirdnodeTrans(<xsl:value-of select="@id" />);
  </xsl:attribute>
 </li>
</xsl:template>

上のようなコード以外にもありますか?
(上のようなコードがいいのかどうかはわかりませんが・・・)

----追記----
サンプルのコードはxmlns:xsl="http://www.w3.org/TR/WD-xsl"以外にも
<?xml:stylesheetになってたのとversion属性がないという問題がありました。
訂正前
<?xml:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
訂正後
<?xml-stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

IEでは問題なく動くようになりましたが、safariでは最初の変換しかしてくれない・・・
調べてみたらsafariのxsl動作対象は<?xml-stylesheet?>のみなのですね・・・

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -