• ベストアンサー
  • すぐに回答を!

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>が昇順に表示されるだけです。 何か最小値、最大値を取得する関数等ありますでしょうか?

共感・応援の気持ちを伝えよう!

  • 回答数1
  • 閲覧数279
  • ありがとう数2

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

  • ベストアンサー
  • 回答No.1
  • jo-ji
  • ベストアンサー率72% (26/36)

まず、ソートする時にはB要素で繰り返さなくてはなりませんよね。 <xsl:template match="A">  <table border="1">   <xsl:for-each select="B">    <xsl:sort select="." data-type="number"/>    <tr>     <td><xsl:value-of select="position()"/></td>     <td><xsl:value-of select="."/></td>    </tr>   </xsl:for-each>  </table> </xsl:template> このようにすると昇順で表示されます (この例の場合は数字としてソートした方が自然なので、 data-type="number"を指定しました) 一応、HTMLでの出力を想定しています。 昇順にする方法が分かっていれば、最小値最大値を取得するのも容易です。 昇順に並んでいるのですから、その1番目の要素に最小値が、 その最後の要素に最大値が、それぞれ入っていることになります。 それを条件指定で取り出せば良いと思います。 <xsl:template match="A">  <table border="1">   <xsl:for-each select="B">    <xsl:sort select="." data-type="number"/>    <xsl:if test="position() = 1">     <tr><td>min</td><td><xsl:value-of select="."/></td></tr>    </xsl:if>    <xsl:if test="position() = last()">     <tr><td>max</td><td><xsl:value-of select="."/></td></tr>    </xsl:if>   </xsl:for-each>  </table> </xsl:template> 実際はたぶんもっと複雑な事例だとは思いますが、 ここから工夫してみて下さい。

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • xslでの表示

    例えば <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 となってしまいます。

    • ベストアンサー
    • 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での指定方法

    こういったXMLファイルがあり、 XSLにて変換をしたいと思っています。 <success> <table> <list> <row> <value>value1</value> <value>value2</value> <value>2</value> <value>10</value> <value>20</value> </row> ・ ・ ・ ・ </list> </table> </success> 上の例にある、 <value>20</value> valueの5番目が20以上のときだけ 色を変更して表示したいと思っています。 xslで <xsl:for-each select="value"> <xsl:if test="value[5]&gt;= 20"> <xsl:attribute name="bgcolor">255,50,50</xsl:attribute> <xsl:value-of select="."/>, </xsl:if> としたのですが、 うまくいきません。 条件式が問題だとは思いますが、 どのような式にしたらよいのでしょうか?

    • ベストアンサー
    • XML
  • XSL中の改行、タブを無効にしたい。

    XMLドキュメントにXSLを適用すると XSL中の改行やタブがそのまま反映されてしまいます。 改行を無くすと1行が長くなってしまい編集が大変で困っています。 どうしたらよいのでしょうか? 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="//z:row"> <xsl:choose> <xsl:when test="(@MACHINE='DELL')"> </xsl:when> <xsl:when test="(@MACHINE='APPLE')"> </xsl:when> <xsl:when test="(@MACHINE='HP')"> </xsl:when> <xsl:otherwise> <xsl:value-of select="@MACHINE" />, <xsl:value-of select="substring(@PARTS_NO,1,1)" />-<xsl:value-of select="substring(@PARTS_NO,2,3)" />-<xsl:value-of select="substring(@PARTS_NO,5,3)" />-<xsl:value-of select="substring(@PARTS_NO,8,2)" />,<xsl:value-of select="@STATUS" />,<xsl:value-of select="@STOCK_NUM" /><xsl:text>&#xA;</xsl:text> <xsl:if test="not(@MACHINE=following-sibling::z:row/@MACHINE)"> <xsl:text>,&#xA;</xsl:text> </xsl:if> </xsl:otherwise> </xsl:choose> </xsl:for-each> </xsl:template> </xsl:stylesheet>

    • ベストアンサー
    • 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
  • XMLをXSLを使いHTMLに変換したいのですが・・・・

    ある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="html" version="4.01" encoding="UTF-8" indent="yes" /> <xsl:template match="/"> <html lang="ja"> <head> <title>○○情報</title> </head> <body><xsl:apply-templates select="ProductInfo"/></body> </html> </xsl:template> <xsl:template match="Responce/Details"/> <h2><xsl:value-of select="Hid"/></h2> <h2><xsl:value-of select="TotalItems"/></h2> <h2><xsl:value-of select="TotalPages"/></h2> <h3><xsl:value-of select="ItemID"/></h3> <h3><xsl:value-of select="ShopID"/></h3> <h3><xsl:value-of select="ProductName"/></h3> <h3><xsl:value-of select="Price"/></h3> <h3><xsl:value-of select="ImageUrlSmall"/></h3> <h3><xsl:value-of select="ImageUrlMedium"/></h3> <h3><xsl:value-of select="mageUrlLarge"/></h3> <h3><xsl:value-of select="URL"/></h3> <h3><xsl:value-of select="MobileURL"/></h3> <h3><xsl:value-of select="Manufacture"/></h3> <h3><xsl:value-of select="Availability"/></h3> <h3><xsl:value-of select="Stock"/></h3> <h3><xsl:value-of select="StockInfinity"/></h3> <h3><xsl:value-of select="ItemDetail"/></h3> <h3><xsl:value-of select="SalesStatus"/></h3> <h3><xsl:value-of select="CategoryID"/></h3> </xsl:template> </xsl:stylesheet> とスタイルシートを作成いたしました。 変換するHMLは <?xml version="1.0" encoding="UTF-8" ?> <?xml-stylesheet type="text/xsl" href="○○.xsl"?> - <ProductInfo> - <Responce> <Hid>○○○○</Hid> <TotalItems>○○○○</TotalItems> <TotalPages>○○○○</TotalPages> - <Details> <ItemID>○○○○</ItemID> <ShopID>○○○○</ShopID> <ProductName>○○○○</ProductName> <Price>○○○○</Price> <Manufacture>○○○○</Manufacture> <Availability>○○○○</Availability> <Stock>0○○○○</Stock> <StockInfinity>○○○○</StockInfinity> <ItemDetail>○○○○</ItemDetail> <SalesStatus>○○○○</SalesStatus> <CategoryID>○○○○</CategoryID> </Details> </Responce> </ProductInfo> 以下<Details>のみ複数繰り返しされます。 この通りに作成したのですが、XMLファイルをウインドウに表示しようとしてもエラーが報告されます。 XSLに繰り返し用のタグを入れても、まったく表示されません。 ちなみにIE7を使用しています。 もし間違っている箇所が分かる方がいらっしゃいましたら、教えていただけませんか? よろしくお願いいたします。

    • ベストアンサー
    • XML
  • xsl:if で行の属性の存在を調べる方法

    (XML詳しくないため、用語がおかしいかもしれません) 次のようなXMLデータがあります。 <ABC A="true" B="xxx" C="xxx" /> <ABC B="xxx" C="xxx" /> Aという属性が存在しているデータを取り除こうとしています。 1データは、A="true"が存在しているか、全く存在しないか、どちらかです。 そこで私は、次のようなXSL文を書いてみました。 <xsl:for-each select="xxxx"> <xsl:if test="A != 'true'"> <xsl:value-of select="xxxx" /> : : </xsl:if> </xsl:for-each> しかし、データは全く出力されません。 <xsl:if test="A = 'true'"> だと、Aがtrueのデータが出力されます。 A自体が存在しないデータを抽出するには、どのようにすればよいでしょうか? どうぞよろしくお願いします。

    • ベストアンサー
    • XML
  • XML/XSLでテンプレートの適用がうまくいかない

    同じツリーの深さで異なる要素名のノードがあるXMLだと期待通りにテンプレートが適用できない という問題に付き当たっています。 例えば    / +------+ poem  poem のような構成だとmatch=poem、value-of select="text"などで各poemの歌詞を表示させることが できます。 一方、以下の構成で同じ事をやろうとすると各poemの歌詞に加えてyearのnumのValueまで 列挙されてしまいます。poemの中身だけ出すにはどうすればよいでしょうか? 以下に例を書きます。     / +--------------+ list         year +------+      +----+ poem poem    Num Num 例えば以下のURLなどを参照してやっております。 http://www6.airnet.ne.jp/manyo/xml/xslt/step15.html XSLはこんな感じです。 <xsl:template match="/"> <xsl:apply-templates /> </xsl:template> <xsl:template match="poem"> <tr> <td><xsl:value-of select="poet" /></td> <td><xsl:value-of select="yomi" /></td> </tr> <br /> </xsl:template> 手持ちのXMLを変換したく、その勉強のため上記のような構成のXMLを扱う方法を 知りたいと思っています。 よろしくお願いします。

    • 締切済み
    • XML
  • XSL内でJavaScriptを記述し、JavaScript内でXMLデータを取得するには・・・

    大変困っていますのでよろしくお願いします。 XSLのファイル内でJavaScriptを記述し、JavaScriptでxmlの要素を取得操作したいのですが、とり方がわかりません。 ご教授のほどをよろしくお願いします。 ================================================================== sample.xsl ------------------------------------------------------------------ <?xml version="1.0" encoding="Shift_JIS"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <head> <title>XML: 基本サンプル</title> </head> <body> <p align="center">サンプル</p> <xsl:apply-templates select="information/value/applicationinfo" /> </body> </html> </xsl:template> <xsl:template match="value/applicationinfo"> <Script Language = "JavaScript"> <xsl:comment> <![CDATA[ document.write("<xsl:value-of select=\"componentname\" />"); ]]> </xsl:comment> </Script> <table border="1"> <tr> <td><xsl:value-of select="componentname" /></td> </tr> </table> </xsl:template> </xsl:stylesheet> ================================================================== 下のテーブルでは要素を表示することはできます。 このやり方では駄目なのでしょうか?

    • ベストアンサー
    • 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