• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:XSLTのselectの指定)

XSLTのselectの指定

このQ&Aのポイント
  • XSLTのselectを使用して、XMLデータ中の特定の要素を選択する方法について教えてください。
  • 注文全体について一冊あたりの平均価格を求めるために、XSLTのselectにどのような指定を行えばよいか教えてください。
  • XSLTを使用して、XMLデータ中の要素の合計を取得する方法について説明してください。

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

  • ベストアンサー
  • dellko
  • ベストアンサー率100% (1/1)
回答No.1

初書き込みです。 時間がったているので解決したかと思いますが、レスしますね。 以下のテンプレートを使用すれば、出来るのかなと思います。 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <body> <xsl:apply-templates select="purchase-order" /> </body> </html> </xsl:template> <xsl:template match="purchase-order"> <xsl:variable name="total_sum"> <xsl:call-template name="culc_sum"> <xsl:with-param name="tanka" select="book/price" /> <xsl:with-param name="suryou" select="book/count" /> </xsl:call-template> </xsl:variable> <xsl:text>合 計</xsl:text> <xsl:value-of select="format-number( $total_sum div sum(book/count),'#,###')" /> </xsl:template> <xsl:template name="culc_sum"> <xsl:param name="tanka" /> <xsl:param name="suryou" /> <xsl:choose> <xsl:when test="not($tanka) or not($suryou)"> <xsl:value-of select="0" /> </xsl:when> <xsl:otherwise> <xsl:variable name="sum_data"> <xsl:call-template name="culc_sum"> <xsl:with-param name="tanka" select="$tanka[position()>1]" /> <xsl:with-param name="suryou" select="$suryou[position()>1]" /> </xsl:call-template> </xsl:variable> <xsl:value-of select="number($tanka[1]) * number($suryou[1]) + $sum_data" /> </xsl:otherwise> </xsl:choose> </xsl:template> </xsl:stylesheet>

noname#20378
質問者

お礼

実は解決しておりませんでした(汗) ご回答ありがとうございます。 (僕が未熟なだけかもしれないけど)ソース見てこんな書き方もあるんだなぁと感心しました

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • dellko
  • ベストアンサー率100% (1/1)
回答No.2

訂正です。 <xsl:text>合 計</xsl:text> ではなくて、 <xsl:text>平均価格</xsl:text> ですね。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • XSLTの処理について

    いつもお世話になっております。 XMLの動作についての質問です。以下のようなXMLファイルがあったとします。それに対して、その下のようなXSLファイルがあり、変換させると、結果XMLができます。 そこでわからないのは、test.xslの中ほどで、<xsl:template match="book/title/price">という風にXPath式でbook/title/priceと指定しているのに、結果には<title>の値も出力されます。なぜでしょうか。 自分のイメージとしては、<title>の値は出力されず<price>の値だけが出力されるのじゃないのかなっていう感じです。さらに<newTag>に<title>の値が挟まれていないのもなぜなのかわかりません。 お分かりになる方よろしくお願いします。もし参考文献に良いサイトや本がありましたらそちらも紹介をお願いします。 <<<test.xml>>> <?xml version="1.0" encoding="Shift_JIS"?> <books>  <book>   <title>    XMLとは    <price>2000</price>   </title>  </book>  <book>   <title>    XML概論    <price>1800</price>   </title>  </book>  <book>   <title>    XMLマスター    <price>4000</price>   </title>  </book> </books> <<<test.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="/">  <answer>   <xsl:apply-templates select="books/book"/>  </answer> </xsl:template> <xsl:template match="book/title/price">  <newTag>   <xsl:value-of select="."/>  </newTag> </xsl:template> </xsl:stylesheet> <<<結果.xml>>> <?xml version="1.0" encoding="utf-8" ?> <answer> XMLとは <newTag>2000</newTag> XML概論 <newTag>1800</newTag> XMLマスター <newTag>4000</newTag> </answer>

    • ベストアンサー
    • XML
  • XSLTの動作

    いつもお世話になります。 以下のXSLTの処理の動き方を教えてください。 どうして3の結果xmlになるのかわかりません。おそらくposition()の取り方がわかっていないのかなって思っています。 自分としては <answer>  <色>白</色>  <色>yellow</色>  <色>赤</色>  <色>blue</色>  <色>黒</色> </answer> になるんじゃないのかなって思ってしまうのですが・・・。 (1)データ <?xml version="1.0" encoding="Shift_JIS"?> <color_pencil>  <price>1300</price>  <color><en>white</en><jp>白</jp>  <color><en>yellow</en><jp>黄色</jp>  <color><en>red</en><jp>赤</jp>  <color><en>blue</en><jp>青</jp>  <color><en>black</en><jp>黒</jp> </color_pencil> (2)XSLT <?xml version="1.0" encoding="Shift_JIS"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/">  <answer>   <for-each select="color_pencil/color">    <xsl:choose>     <xsl:when test="position() mod 2=0">      <xsl:apply-templates select="." />     </xsl:when>     <xsl:otherwise>      <xsl:call-template name="color" />     </xsl:otherwise>    </xsl:choose>   </xsl:for-each>  </answer> </xsl:template>  <xsl:template match="color">   <色><xsl:value-of select="jp" /></色>  </xsl:template>  <xsl:template name="color">   <色><xsl:value-of select="en" /></色>  <xsl:template> </xsl:stylesheet> (3)結果xml <answer>  <色>white</色>  <色>黄色</色>  <色>red</色>  <色>青</色>  <色>black</色> </answer>

    • ベストアンサー
    • XML
  • XSLT変換について

    以下のようにファイルを作成してみました。 ローカルではIEに表示できるのですが,アップすると表示されず「スタイルシートにドキュメント要素が含まれていません。スタイルシートが空であるか、正しく構成された XMLドキュメントでない可能性があります。」というコメントが出ます。ご存知の方いらっしゃいましたらどうか教えてください。 ↓作成したファイル 「top.xml」(省略) 「top.xsl」 <?xml version="1.0" encoding="Shift_JIS" ?> <xsl:stylesheet xmlns:xsl="(省略)" version="1.0"> <xsl:import href="./note.xsl" /> <xsl:output method="html" encoding="Shift_JIS" /> <xsl:template match="/">  <html xmlns="(省略)" xml:lang="ja" lang="ja">  <head>   <meta http-equiv="Content-Type"    content="text/html; charset=Shift_JIS" />   <title><xsl:value-of   select="/top/title" /></title>  </head>  <body>   <xsl:call-template name="header" />   <div align="center"><h1>HOME PAGE</h1></div>   <table> <tr><th>CONTENTS</th></tr> <xsl:for-each select="/top/contents"> <tr><th><a href="{url}"><xsl:value-of      select="label" /></a></th>      <td><small><xsl:value-of      select="text" /></small></td></tr> </xsl:for-each>   </table><br />   <xsl:call-template name="footer" />  </body>  </html> </xsl:template> </xsl:stylesheet> 「note.xsl」(top.xslにおけるxsl:importをコメントアウトしても結果は変わらなかったため,記載省略。)

    • 締切済み
    • XML
  • Firefox・GoogleChromeでのxslt読み込み

    Firefox・GoogleChromeでのxslt読み込み 現在、xml + xsltでhtmlを生成する試験をしているのですが、 Firefox・GoogleChromeで意図通りの結果にならず悩んでおります。 ソースは下記の通りなのですが、何かアドバイスをいただけたら助かります。 test.xmlとtest.xslを下記のようなフォルダ構成で配置する。 【フォルダ構成】 project |-xml | |-test.xml |-xsl |-test.xsl 【ソース】 test.xml <?xml version = "1.0" encoding = "utf-8"?> <?xml-stylesheet type = "text/xsl" href = "../xsl/test.xsl"?> <tests name = "test"> <test> <tag>aaa</tag> </test> <test> <tag>bbb</tag> </test> <test> <tag>ccc</tag> </test> </tests> test.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" encoding = "utf-8" doctype-system = "string" media-type = "text/xml" /> <xsl:template match="/"> <html lang = "ja-JP"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Style-Type" content="text/css" /> <title><xsl:value-of select = "tests/@name" /></title> </head> <body> <xsl:apply-templates /> </body> </html> </xsl:template> <xsl:template match = "test"> <div> <xsl:value-of select = "tag" /> </div> </xsl:template> </xsl:stylesheet> 【結果】 ・IE・Safari・Opera -> ちゃんと表示してくれる ・Firefox(Ver3.5.3) -> NG   ->・ページタイトル反映されない    ・tagの中身("aaa"・"bbb"・"ccc")が一行に表示されてしまう ・Google Chrome(Ver5.0.342.8 beta) -> NG   ->・何も表示されず、画面真っ白    ・デベロッパーツールでは、"Unsafe attempt to load URL・・・"とエラーが出ている 【備考】 ・『Mozilla で扱えるMIMEタイプは、IEより厳密』みたいな記述を見つけたので、 test.xslの3行目に呪文みたいなのを見よう見真似で書いてみたのですが、 効果なし。というか、この記述があってるのかも分からない。。。 ・Firefoxの場合、同じフォルダにtest.xmlとtest.xslを配置すると ちゃんと表示してくれる。 長々となってしまいましたが、よろしくお願いします。

    • 締切済み
    • XML
  • javascriptからxsltに値を渡したい

    お世話になります。 下記のサイトを参考に http://webcache.googleusercontent.com/search?q=cache:587mPIaRXcwJ:www.tagindex.com/kakolog/q4bbs/1701/2037.html+xsltProc.setParameter&cd=5&hl=ja&ct=clnk&gl=jp&lr=lang_ja http://webcache.googleusercontent.com/search?q=cache:qLCKa_Rxc58J:domes.lingua.heliohost.org/dom/intro-misc2.html+xsltProc.setParameter&cd=2&hl=ja&ct=clnk&gl=jp&lr=lang_ja http://webcache.googleusercontent.com/search?q=cache:SJR9ZdyaGNUJ:taugus.web.fc2.com/WEB/XML/xml.html+javascript%E3%81%8B%E3%82%89xslt%E3%81%AB%E5%80%A4%E3%82%92%E6%B8%A1%E3%81%97%E3%81%9F%E3%81%84&cd=4&hl=ja&ct=clnk&gl=jp javascriptからxsltに値を渡したいと考え、下記のように設定してみているのですが、思うようにxsltファイルで参照出来ず、途方に暮れております。 どなた様か解決法などご教授願えませんでしょうか。お願い致します。 ※環境は、FireFox3.5を使っておりまして、現状、FireFoxのみで動作すれば良いと考えてます。 --test-1.html---- <html><head> <meta content="text/html; charset=utf8" http-equiv="content-type"> <title>JS+xslt</title> <script type="text/javascript"> function tramsformlists(xmlFile, xslFile, resultNodeID, Num){//chTag=inputのthis.value // alert("resultNodeIDは" + resultNodeID + "です。"); var xml, xslt, newDoc; var doc = document; var impl = doc.implementation; // XML ドキュメントの読み込み var xml = impl.createDocument("", "", null); xml.async = false; xml.load(xmlFile); // XSL ドキュメントの読み込み var xslt = impl.createDocument("", "", null); xslt.async = false; xslt.load(xslFile); // XSLT プロセッサを作成 var xsltp = new XSLTProcessor(); xsltp.importStylesheet(xslt); // 下記2つのどちらかの方法で取得したいと思ってますが、xslt側で、どちらの方法でも参照できないです xsltp.setParameter ('', "param.num", param.value); xsltp.setParameter ('', "Num", Num); // XSLT 実行(戻り値は文書断片ノード) var df = xsltp.transformToFragment(xml, doc); // 結果を付加 // var t3 = doc.getElementById("LorRorC"); // t4=t3.options[t3.selectedIndex].value; // alert("resultNodeIDは" + t4 + "です。"); var t1 = doc.getElementById("Div"+resultNodeID); t1.innerHTML = ""; t1.appendChild(doc.importNode(df, true)); var t2 = doc.forms["msg_form"].elements["Textarea" + resultNodeID]; t2.value = (new XMLSerializer).serializeToString(df);//DOM ノードを XML データに書き出す } </script> </head><body> <form name="msg_form"> <ul> <li> <input type="button" value="Menu" onclick="tramsformlists('test0.xml','test0.xsl','Test','10')"><br> <select name="num"> <option value="10" selected="selected">10</option> </select> <div id="DivTest"></div> <textarea cols="50" rows="10" id="TextareaTest">あああああああ</textarea> </li> </ul> </form> </body></html> ---- --test0.xml--- <?xml version="1.0" encoding="utf-8"?> <root> <nolink_logo> </nolink_logo> </root> ---- --test0.xsl--- <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html" encoding="utf-8"/> <xsl:template match="root"> <xsl:apply-templates select="nolink_logo"/> </xsl:template> <xsl:template match="nolink_logo"> <xsl:call-template name="Test" /> </xsl:template> <xsl:template name="Test"> <xsl:variable name="menu" select="document('test1.xml')/root"/> <xsl:param name="param.num">0</xsl:param> <xsl:param name="Num">0</xsl:param> <div id="{$param.num} {$Num}">画像を表示 <xsl:for-each select="$menu"> <xsl:element name="a"> <xsl:attribute name="href"> <xsl:value-of select="url[1]"/> </xsl:attribute> <xsl:attribute name="target">_blank</xsl:attribute> <xsl:element name="img"> <xsl:attribute name="src"> <xsl:value-of select="img[1]"/> </xsl:attribute> </xsl:element> </xsl:element> </xsl:for-each> </div> </xsl:template> </xsl:stylesheet> ---- --test1.xml-- <?xml version="1.0" encoding="utf-8"?> <root> <img>http://domain/image2.gif</img> <url>http://domain/test.html</url> </root> ---- 大変恐縮ですが、どなた様かご教授頂けませんでしょうか 宜しく願い致します。

  • XMLからcsvへの変換

    下記のXMLのフィールドの項目を xslを使い、msxsl.exe経由で、csvへ変換をしたいのですが、 各field nameを抽出するのがうまくいきません。 copy condition=の箇所は必要ありません。 どなたかご教示のほど、お願いいたします。 ■XML <?xml version="1.0" encoding="UTF-8"?> <exportData> <Book id="id"> <field name="keywords"></field> <field name="listName"></field> <field name="publisher"></field> <field name="publishDate"></field> <field name="illustrators"></field> <field name="isbn"></field> <field name="length"></field> <field name="id"></field> <field name="series"></field> <field name="authors"></field> <field name="title"></field> <field name="summary"></field> <field name="format"></field> <field name="genre"></field> <field name="coverImage"></field> <field name="List Price"></field> <field name="URL"> </field> <field name="Current Value"></field> <field name="isbn13"></field> <copy condition="" dateAcquired="" location="Bookshelf" owner="" presentValue="" source=""> </copy> </Book> ■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="text" encoding="UTF-8"/> <xsl:template match="/">keywords,listName,publisher,publishDate,illustrators,isbn,length,id,series,authors,title,summary,format,genre,coverImage,URL,CurrentValue,isbn13 <xsl:apply-templates select="//Book"/> </xsl:template> <xsl:template match="Book"> <xsl:call-template name="keywords"/>,<xsl:call-template name="listName"/>,<xsl:call-template name="publisher"/>,<xsl:call-template name="publishDate"/>,<xsl:call-template name="illustrators"/>,<xsl:call-template name="isbn"/>,<xsl:call-template name="length"/>,<xsl:call-template name="id"/>,<xsl:call-template name="series"/>,<xsl:call-template name="authors"/>,<xsl:call-template name="title"/>,<xsl:call-template name="summary"/>,<xsl:call-template name="format"/>,<xsl:call-template name="genre"/>,<xsl:call-template name="coverImage"/>,<xsl:call-template name="URL"/>,<xsl:call-template name="CurrentValue"/>,<xsl:call-template name="isbn13"/><xsl:text> </xsl:text> </xsl:template> </xsl:stylesheet> よろしくお願いいたします。

    • ベストアンサー
    • XML
  • (大至急)JavaScriptの質問です

    xmlファイルを読み込んで 書籍1: Title:ハリーポッター ・ ・ 書籍2: Title:広辞苑 ・ ・ 書籍3: ・ ・ のように表示させるJavaScriptのプログラム(拡張子はhtml)を作りたいのですが、上手く行きません。大至急教えて頂けないでしょうか?!本当に困ってます・・・ ///////////作りかけのJavaScriptプログラム//////// <HTML> <script> xmldoc=new ActiveXObject("Microsoft.XMLDOM"); xmldoc.load("Books.xml"); var str=""; var i=0,j=0,imax=0; imax = xmldoc.documentElement.childNodes.length; var Titles = xmldoc.documentElement.getElementsByTagName("Title"); var Authors = xmldoc.documentElement.getElementsByTagName("Author"); var Prices = xmldoc.documentElement.getElementsByTagName("Price"); for(var i=0;i< imax;i++){ str=str+xmldoc.documentElement.childNodes.item(i).text+"<BR />"; document.writeln(str); } </script> <body> </body> </HTML> ///////////作りかけのJavaScriptプログラム//////// ////////////Books.xml////////////// <?xml version="1.0" encoding="SHIFT_JIS" ?> <?xml-stylesheet type="text/xsl" href="kadai3.xsl" ?> <Books> <Book> <Title>ハリーポッター</Title> <Author>j.kローリング</Author> <Price>3800</Price> </Book> <Book> <Title>広辞苑</Title> <Author>鈴木太郎</Author> <Price>6800</Price> </Book> <Book> <Title>魚の図鑑</Title> <Author>田中雅夫</Author> <Price>4500</Price> </Book> </Books> ////////////Books.xml//////////////

  • XMLをXSLTやCSSに変換してHTMLで出力

    XMLデータ <?xml version="1.0" encoding="Shift-JIS"?> <flower> <naiyou> 本文 </naiyou> <name>花言葉</name> <flow><name>あきらめ </name></flow> <flow><list>悲しい思い出 </list></flow> <flow><name>情熱 </name></flow> <flow><list>独立 </list></flow> <flow><name>再会 </name></flow> <flow><list>想うはあなた一人 </list></flow> <flow><name>また会う日を楽しみに </name> </flow> </flower> を変換したいのです。 XSLTデータ <?xml version="1.0" encoding="Shift-JIS"?> <xsl:stylesheet version="1.0" xmlns:xsl="F:\i08i008\I08I008.html"> <xsl:output method="html"/> <xsl:template match="/"> <html><xsl:apply-templates/></html> </xsl:template> <xsl:template match="flower"> <h1>彼岸花</h1>  <xsl:apply-templates/>  </xsl:template> <xsl:template match="naiyou"> <p><xsl:value-of select="."/></p> </xsl:template> <xsl:template match="flow"> <xsl:value-of select="name"/> <table flame="border" width="50%"> <tr><th>彼岸花</th><th>花言葉</th></tr> <xsl:for-each select="flow"> <tr> <td><xsl:value-of select="name"/></td> <td><xsl:value-of select="list"/></td> </tr> </xsl:for-each> </table> </xsl:template> </xsl:stylesheet> ここまで作ったのですが、うまくHTMLに出力できません。原因がわかる方、教えてください。 イメージ図 <html> <head> <title>彼岸花</title> </head> <body> <div style="font-weight:bold"> 彼岸花 </div> ヒガンバナ科ヒガンバナ属の多年草。別名「曼珠沙華」という別名があるのは有名だが、他にも呼び名があるのは知られていない。<br> ただ、その名前が「地獄花」、「捨子花」などと縁起でもない名前ばかりである。<br> その中でも何故「はっかけばばあ」という呼び名があるのかは疑問である。<br> <img src="http://farm1.static.flickr.com/120/252830085_712ffd338b.jpg"width="171" height="171"><br> <br> <table border="1"bgcolor="#b22222"> <tr> <th colspan="2">彼岸花</th> </tr> <tr> <th colspan="2">花言葉</th> </tr> <tr> <th>悲しい思い出</th> <th>独立</th> </tr> <tr> <td>独立</td> <td>諦め</td> </tr> <tr> <td>再開</td> <td>情熱</td> </tr> </table> </body> </html> XSLTについては(CSSもそうですが)、イメージ図の通り、写真を掲載したりや表に配色をしたいとも考えております。そのあたりのアドバイスも頂けると嬉しいです。 あとCSSについてもサイトで色々見たのですが、どれもさっぱり解かりませんでした。初心者な私にでも解かりやすいサイト教えてください。一から勉強しているところです。 CSSはこういう風に記述するんだよ、と簡単に教えて頂ける優しい方もいたら回答お願いします。サイトだけでは悪戦苦闘しそうなもので…。物凄い不安です。

    • 締切済み
    • XML
  • 簡単なことだと思うんですが・・・

    XML初心者のものです。 要素の中に要素を生成するXSLを作ったのですが、 生成されません。 XMLは - <item no="1"> <title>プログラムの基礎</title> <creator>Heinemeier Hansson</creator> <publisher>オーム社</publisher> - <keywords> <keyword>プログラミング</keyword> <keyword>ソフトウェア</keyword> <keyword>入門</keyword> </keywords> </item> となっており、 XSLは <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <list> <xsl:apply-templates select="books/item/keywords/keyword"/> </list> </xsl:template> <xsl:template match="keyword"> <category> <xsl:value-of select="."/> <xsl:apply-templates select="books/item/title"/> </category> </xsl:template> <xsl:template match="title"> <title> <xsl:value-of select="."/> </title> </xsl:template> </xsl:stylesheet> としています。 生成されるXMLは、 <list> <category>プログラムの基礎</category> </list> となり、<title>が入りません。 解決策を教えてくださいm(_ _)m

    • ベストアンサー
    • XML
  • 次の要素の値取得

    XSLで、要素の値の取得方法がわかりません。 ご教授いただければうれしいです。 XML----------------------------------- <data> <num1>test</num1> <title>title</title> </data> <data> <num2>test2</num2> <title>title</title> </data> で、XSL内で、 <xsl:template match="num1"> // ここで、num2があるか判断したい </xsl:template> ということは、出来るのでしょうか?

    • ベストアンサー
    • XML
このQ&Aのポイント
  • TS8130とTS8330を使っていますが、この2,3か月で印刷するとブラックが印字されなくなりました。
  • ノズルクリーンアップしてチェックパターン印刷ではブラックも印刷されます。
  • 推定原因、ここの設定どうなっている?等有ればご教授願います。
回答を見る

専門家に質問してみよう