• ベストアンサー

xsl:sortを子要素で

こんにちは。いつもお世話になっています <a hoge="hoge"> <b id="1"> <b id="3"> </a> <a hoge="hogehoge"> <b id="2"> </a> このような構造のxmlで、xslを使用して <b id="1"> <b id="2"> <b id="3"> のような出力を得たいと思っています。 <xsl:apply-templates><xsl:sort select="b" /><xsl:apply-templates> では上手くいきませんでした。 何か方法があるでしょうか

  • XML
  • 回答数2
  • ありがとう数1

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

><b id="2" />は表示しないものを作ってみました。 <xsl:template match="/"> <xsl:for-each select="//a/b[@id!='2']"> <xsl:sort select="./@id" data-type="number"/> <xsl:copy-of select="." /> </xsl:for-each> </xsl:template> としてみはどうでしょうか

masaota56
質問者

お礼

ありがとうございます、試してみます。

その他の回答 (1)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

<xsl:template match="/"> <xsl:for-each select="//a/b"> <xsl:sort select="./@id" data-type="number"/> <xsl:copy-of select="." /> </xsl:for-each> </xsl:template>

masaota56
質問者

補足

投稿が遅くなってすみません。 ------------------------- 質問の訂正 <xsl:apply-templates><xsl:sort select="b" /><xsl:apply-templates> ↓ <xsl:apply-templates><xsl:sort select="b/@id" /><xsl:apply-templates> <b ~~ > ↓ <b ~~ /> ------------------------- これを他のxslからimportで参照して、そこで <xsl:template match="b[id!='2']"></xsl:template> のようにし、xsl毎に表示内容を変えたいと思っています。 試しに、<b id="2" />は表示しないものを作ってみました。 --style.xsl-- <xsl:for-each select="//a/b"> <xsl:sort select="./@id" /> <xsl:apply-templates /></xsl:for-each> --style2.xsl-- style.xslをインポートする処理 <xsl:template match="b[@id!='2']" /> </xsl:template> のようにすると、style2.xslのtemplateは無視されてしまいます。何か良い方法はあるでしょうか。

関連するQ&A

  • 何故か子の要素に xmlns=

    ある「AABBCC」のタグが記述されているXML文書が有ります。 その文書に対し下記のXSLで変換をすると <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="xml" version="1.0" encoding="UTF-16" indent="yes" /> <xsl:template match="/"> <ABC xmlns="http://www.abcd.co.jp/Schema_1_1"> <xsl:apply-templates select="AABBCC" /> </ABC> </xsl:template> <xsl:template match="AABBCC"> <DEF> <xsl:attribute name="ID">1</xsl:attribute> </DEF> </xsl:template> </xsl:stylesheet> 下記のような出力を期待しているのですが、 <?xml version="1.0" ?> <ABC xmlns="http://www.abcd.co.jp/Schema_1_1"> <DEF ID="1" /> </ABC> 何故か以下のようにDEFの属性に「xmlns=""」が追加されてしまいます。 <?xml version="1.0" ?> <ABC xmlns="http://www.abcd.co.jp/Schema_1_1"> <DEF ID="1" xmlns="" /> </ABC> まだ、XML,XSL共に勉強を始めたばかりでよく分かってないのでどうしてこのようなことが起こるのか、また対処法を教えてください。 アホな質問かもしれませんが、よろしくお願いします。

    • 締切済み
    • XML
  • xslのdocument関数で読込んだ2つのxmlをxsl:sortしたい

    次のXSLで動作させています。 <?xml version="1.0" encoding="Shift_JIS"?> <xsl:stylesheet xml:space="default" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema"> <xsl:output method="text" /> <xsl:template match="/"> <xsl:for-each select="document('取り込むXMLファイル')//z:row"> <xsl:value-of select="@取り出したい属性の名前" /> </xsl:for-each> <xsl:for-each select="//z:row"> <xsl:value-of select="@取り出したい属性の名前" /> </xsl:for-each> </xsl:template> </xsl:stylesheet> ここまでは出来たのですが、xsl:sortでまとめてsortするにはどうすればいいのでしょうか?

    • ベストアンサー
    • XML
  • XSLの中でHTMLタグが使えない

    XMLとXSLTを使って、Formの中のListのオプションを、XML から取ってきたいと思ってます。イメージ的には、下記 の○○○の中に、<xsl:value-of select="."/>を入れる ことによって、<option value="<xsl:value-of select="."/>"><xsl:value-of select="."/></option> の様にしたいのですが、<や>を&lt;や&gt;に変えても、 うまく表示されません。また、Selectタグの属性の Multipleも=サインが無いとかで使えませし,Inputタグ も、終了タグが無いため使えませんでした。どのように 対処したら良いのでしょうか?よろしくお願いしま す。 <select name="list1" size="10" id="select5"> <xsl:apply-templates/> </select> <xsl:template match="//name"> <option value="○○○">○○○</option> </xsl:template>

    • 締切済み
    • XML
  • <xsl:apply-templates />単独

    お世話になります。 現在、サンプルのXSLTスタイルシート内を解析中なのですが、 各テンプレート内に、 <xsl:apply-templates />という単独での要素が、 いくつも出てきます。 ネット上で調べてみたところ、 「ほかのテンプレートの処理に移ることが出来る」 ということのようですが、 いまいち、この単独での要素を、 記述する意味が、よくわかりません。 (最近、XSLTを本で勉強しはじめたばかりなのですが、   その本には、”<xsl:apply-templates select="mains">”みたいな例しか掲載されておらず、   <xsl:apply-templates />という単独での説明が、残念ながら存在しておりませんでした・・・) そこでご質問内容ですが、 XSLTスタイルシート内のテンプレート内に、 <xsl:apply-templates />という単独で、 で記述するのは、 どのようなことを実現させたいときに、 記述しているのでしょうか? 以上になります。 出来ましたら、例などを出していただきまして、 具体的に理解しやすく教えていただけますと 助かります。 どうぞよろしくお願いします。

    • ベストアンサー
    • XML
  • xsl、xpath式の書き方について

    xslで質問させてください。 以下のようなxmlとxslを作っているのですが、xslの最後のほうで、 sample.xmlの/empList/emp/type/@idの値に応じて、typeList.xmlの/typeList/type/titleの値を取得したくて、 xsl:value-of select="document('typeList.xml')/typeList/type[@id = type/@id]/title/text()" /> と書いていますが、うまくいきません。どうすればいいでしょうか? -----[sample.xml] <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet href="a.xsl" type="text/xsl"?> <empList> <emp> <type id="1" /> <name>鈴木</name> <desc>あああ</desc> </emp> <emp> <type id="2" /> <name>田中</name> <desc>いいい</desc> </emp> </empList> -----[typeList.xml] <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet href="a.xsl" type="text/xsl"?> <typeList> <type id="1"> <title>タイプ1</title> </type> <type id="2"> <title>タイプ2</title> </type> </typeList> -----[a.xsl] <?xml version="1.0" encoding="UTF-8" ?> <xsl:stylesheet version="1.0" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html" encoding="UTF-8" omit-xml-declaration="yes" doctype-public="-//W3C//DTD XHTML 1.1//EN" doctype-system="http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" media-type="text/html" /> <xsl:template match="/"> <html> <head><title>サンプル</title></head> <body> <xsl:apply-templates select="empList/emp" /> </body> </html> </xsl:template> <xsl:template match="emp"> <h2><xsl:value-of select="name/text()" /></h2> <p>タイプ:<xsl:value-of select="document('typeList.xml')/typeList/type[@id = type/@id]/title/text()" /></p> <p>メモ:<xsl:value-of select="desc/text()" /></p> </xsl:template> </xsl:stylesheet>

    • ベストアンサー
    • XML
  • xslでの最小値、最大値の取得

    <A>  <B>50</B>  <B>20</B>  <B>5</B>  <B>60</B>  <B>100</B> </A> 例えば上のようなXMLがあったとします。 それにxslを適用したときに、最小値と最大値のみを表示させたいのですが、xslではどのような処理をすればよいのでしょうか? <xsl:for-each select="A">  <xsl:sort select="./B"/>  <xsl:value-of select="."/> </xsl:for-each> 上のようだと全ての<B>が昇順に表示されるだけです。 何か最小値、最大値を取得する関数等ありますでしょうか?

    • ベストアンサー
    • XML
  • xsl:variableでの抽出条件の変更

    こんにちは、Khazadと申します。  xsl:variableで、xsl:apply-templates の抽出条件を変更したくて 下記のようなXSLを作成したのですが、うまくいきません。  原因がわかる方。または別の方法があればご教授お願いできないでしょうか?  パーサーはMSXML3.0です。 (試したこと) 1 テンプレート内に<xsl:value-of select='$frid'/>を挿入すると、   ちゃんと1が表示されます。 2 [@rid='{$frid}']の部分を[@rid='$frid']に変更しても抽出は   行われません。 3 [@rid='{$frid}']の部分を[@rid='1']にすると抽出されます。  以下XSLのソースです -------------------------------------------------------- <xsl:variable name = 'frid' select='1' ></xsl:variable> <xsl:template match="/"> <xsl:apply-templates select="ROOT//*[@rid='{$frid}']"/> </xsl:template> <xsl:template match="*[@rid='{$frid}']"> <xsl:apply-templates select="*"/> </xsl:template> --------------------------------------------------------

    • ベストアンサー
    • XML
  • スタイルシートを使って、要素タグがついたまま文を取り出したい

    お世話になります。 下記出力.xmlの内容で 「出力.xml <文> I <u>have <空欄>a</空欄> pen</u> <文>」 という内容があります。 そこで、スタイルシートの処理を通して、 「I <u>have <空欄>a</空欄> pen</u>」とタグが付いたまま取り出したいのですが、 下記のようなスタイルシートにすると 「I <u>have a pen </u>」 と外の<u>のタグしか表示されません。 「変換.xsl <xsl:apply-templates select="文"> <xsl:template match="u"> <xsl:element name="u"> <xsl:value-of select="." /> </xsl:element> <xsl;template> <xsl:template match="空欄"> <xsl:element name="空欄"> <xsl:value-of select="." /> </xsl:element> <xsl;template>                  」 どのようにすれば 「I <u>have <空欄>a</空欄> pen</u>」とタグがついたままで 取り出せるのでしょうか? 大変お手数ですが、何卒よろしくお願いします。

    • ベストアンサー
    • XML
  • XSLのifがいまいち理解ができなく。

    if文をどうやればいいのかで悩んでしまいに詰まっている状態です。 URLがない場合は何も表示しないにしたいのですが、参考ページを見ても全くわからない状態。 test.xsl <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet> <xsl:template match="/"> <xsl:apply-templates select="page/message"/> </xsl:template> <xsl:template match="page/message"> <table> <tr> <td>名前</td> <td><xsl:value-of select="name"/></td> </tr> <tr> <td>URL</td> <td><a><xsl:attribute name="href"><xsl:value-of select="@url" /></xsl:attribute><xsl:attribute name="target">_blank</xsl:attribute><xsl:value-of select="@url" /></a></td> </tr> </table> </xsl:template> </xsl:stylesheet> xml <?xml version="1.0" encoding="utf-8"?> <page> <message url="http://yahoo.co.jp"><name>山田太郎</name></message> <message url=""><name>山田花子</name></message> </page>

    • ベストアンサー
    • XML
  • XSL : 変数について

    XSL : 変数について 初めて質問致します。 ご教示宜しくお願い致します。 ****** XML文書 ****** <root> <A>1</A> <B> <B_1>2</B_1> <B_2>3</B_2> </B> </root> ****** 質問 ****** xsl で、上記xml文書の<B>タグ配下 <B_1>2</B_1> <B_2>3</B_2> を変数に代入するにはどのようにすれば いいでしょうか?(タグ名も含めて) 下記の2つを試してみましたが、 いずれも 「2 3」となります。 ・ <xsl:variable name="hoo" select="B"/> ・<xsl:variable name="hoo"> <xsl:copy-of select="B"> </xsl:variable> 質問に不明瞭な点がありましたら ご指摘下さい。 宜しくお願い致します。

    • 締切済み
    • XML

専門家に質問してみよう