XMLから変換結果を得るXSLスタイルシートの作り方

このQ&Aのポイント
  • XMLからXSLスタイルシートを使用して変換結果を得る方法について解説します。
  • XSLスタイルシートを作成する際には、試験番号を抜き出す、合格基準が70より大きい試験を抜き出す、試験番号のリストを出題数が多い順にソートするという具体的な方法を使用します。
  • これらの方法を使用することで、XMLから求める変換結果を得ることができます。
回答を見る
  • ベストアンサー

XMLから、次の変換結果を得るようなXSLスタイルシートを作る

<?xml version="1.0" encoding="Shift_JIS" ?> <試験>   <タイトル>テスト</タイトル>   <情報>    <試験名 試験番号="01">国語</試験名>    <試験時間>60</試験時間>    <出題数>50</出題数>    <合格基準>80</合格基準>   </情報>   <情報>    <試験名 試験番号="02">数学</試験名>    <試験時間>80</試験時間>    <出題数>40</出題数>    <合格基準>75</合格基準>   </情報>   <情報>    <試験名 試験番号="03">英語</試験名>    <試験時間>100</試験時間>    <出題数>45</出題数>    <合格基準>70</合格基準>   </情報> </試験> 上のXMLから、次の変換結果を得るようなXSLスタイルシートを作るにはどうすればいいんでしょうか。 1. 試験番号だけを抜き出して次のように列挙する。 <試験> <試験番号>01</試験番号> <試験番号>02</試験番号> <試験番号>03</試験番号> </試験> 2. 合格基準が70より大きい 試験を抜き出して、次のように列挙する (「難易度」属性を追加) ※xsl:ifまたはxsl:chooseを用いよ <試験 難易度="やや難"> <試験名>01</試験名> <試験名>02</試験名> </試験> 3. 1の試験番号のリストを出題数が多い順にソートして次のように列挙する (「出題数」を属性として追加) <試験> <試験番号 出題数="50">01</試験番号> <試験番号 出題数="45">03</試験番号> <試験番号 出題数="40">02</試験番号> </試験>

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

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

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

3. 1の試験番号のリストを出題数が多い順にソートして次のように列挙する <?xml version="1.0" encoding="Shift_JIS"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" version="1.0" encoding="Shift_JIS" indent="yes" /> <xsl:template match="/"> <xsl:element name="試験"> <xsl:for-each select="/試験/情報"> <xsl:sort select="出題数" lang="ja" data-type="number" order="descending"/> <xsl:element name="試験番号"> <xsl:attribute name="出題数"><xsl:value-of select="./出題数" /></xsl:attribute> <xsl:value-of select="./試験名/@試験番号" /> </xsl:element> </xsl:for-each> </xsl:element> </xsl:template> </xsl:stylesheet>

salada_831_0141
質問者

お礼

変換することができました。 ご丁寧にありがとうございました。

その他の回答 (2)

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

1. 試験番号だけを抜き出して次のように列挙する。 <?xml version="1.0" encoding="Shift_JIS"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" version="1.0" encoding="Shift_JIS" indent="yes" /> <xsl:template match="/"> <xsl:element name="試験"> <xsl:for-each select="/試験/情報/試験名"> <xsl:element name="試験番号"><xsl:value-of select="@試験番号" /></xsl:element> </xsl:for-each> </xsl:element> </xsl:template> </xsl:stylesheet>

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

2. 合格基準が70より大きい試験を抜き出して、次のように列挙する <?xml version="1.0" encoding="Shift_JIS"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" version="1.0" encoding="Shift_JIS" indent="yes" /> <xsl:template match="/"> <xsl:element name="試験"> <xsl:attribute name="難易度">やや難</xsl:attribute> <xsl:for-each select="/試験/情報"> <xsl:if test="合格基準[.&gt; 70]"> <xsl:element name="試験名"><xsl:value-of select="./試験名/@試験番号" /></xsl:element> </xsl:if> </xsl:for-each> </xsl:element> </xsl:template> </xsl:stylesheet>

関連するQ&A

  • 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
  • XMLをxalanでXSL-FOに変換する

    book.xmlとbook.xslでbook.foに変換にxalanで実行しました。 >java org.apache.xalan.xslt.Process -in book.xml -xsl book.xsl -out book.fo ところが、以下のようにエラーが出ました。 Exception in thread "main" java.lang.ClassCastException: org.apache.xalan.res.XSLTErrorResources_ja at org.apache.xalan.xslt.Process.main(Process.java:209) 何が原因なのでしょうか?xalan-j_2_4_1のxalan.jarとxercesImpl.jarにはCLASSPATH設定をしています。 <book.xml> <?xml version="1.0" encoding="Shift_JIS" ?> <?xml:stylesheet type="text/xsl" href="book.xsl" ?> <書籍管理> <書籍情報 ID="1"> <書籍名>スタイルシート辞典 第2版</書籍名> <著者>安川英明</著者> <出版社>翔泳社</出版社> <価格>1800</価格> </書籍情報> ・・・ <書籍管理> 文字数が多くなってすべてbook.xslがかけませんでした。 テーブル形式で表示するようしたいのです。 <xsl:template match="書籍管理"><fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"> ・・・ <fo:table> <fo:table-column column-width="50mm"/> ・・・ <fo:table-body><fo:table-row><fo:table-cell><fo:block>書籍名</fo:block></fo:table-cell>・・・</fo:table-row> <xsl:apply-templates/> </fo:table-body> </fo:table> </fo:flow></fo:page-sequence> </fo:root></xsl:template> <xsl:template match="書籍情報"> <fo:table-row><xsl:apply-templates/></fo:table-row> </xsl:template> <xsl:template match="書籍名"> <fo:table-cell><fo:block><xsl:value-of select='.'/></fo:block></fo:table-cell> </xsl:template>

    • ベストアンサー
    • 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
  • 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
  • amazonECS4.0 XMLをHTMLに変換出来ません

    amazonECS4.0を利用してRESTリクエスト通信により返ってきたXMLをXSLTによりHTMLに変換したいのですが、うまく行きません... ■解決してほしい点 xmlにて戻ってきたタイトル情報のみを表示させようとしている、xslをアップロードしているのですが、うまくいきません。。。 まずは特定の情報のみを抜き出して表示する方法を知りたいのですが、分かる方いらっしゃいますでしょうか? このXMLに対してタイトル情報と画像情報のみを抜き出して表示出来るようなXSLソースを求めています。 XML、XSL以前にamazonECS4.0的におかしな記述がありましたら、そちらもご指摘お願いします。 ※環境等 サーバー名 s285.xrea.com Apache 1.3.37 PHP 5.1.6 PEARの使用は考えていません。 よろしくお願いします。 ■XML出力URL http://webservices.amazon.co.jp/onca/xml?Service=AWSECommerceService&SubscriptionId=09CD3TD99AGC2WFY5582&Operation=ItemSearch&Keywords=web&IdType=ASIN&ResponseGroup=Small&SearchIndex=Books&ContentType=text/xml ■HTML出力URL http://xml-jp.amznxslt.com/onca/xml?Service=AWSECommerceService&SubscriptionId=09CD3TD99AGC2WFY5582&Operation=ItemSearch&Keywords=web&IdType=ASIN&ResponseGroup=Small&SearchIndex=Books&ContentType=text%2Fhtml&Style=http%3A%2F%2Fspunkyweb.net%2Famazon%2Famazon%5F2.xsl ■XSL文書URL http://spunkyweb.net/amazon/amazon_2.xsl

    • ベストアンサー
    • XML
  • xml→htmlへの変換&ページ分割したい

    まず、下記のxml、xslによりhtmlページを出力しています。 ■test.xml <?xml version="1.0" encoding="UTF-8"?> <all> <index file_id="a"> <product file_id="a-01"> <yoso>ああああああああああああああああ</yoso> </product> <product file_id="a-02"> <yoso>いいいいいいいいいいいいいいいい</yoso> </product> <product file_id="a-03"> <yoso>うううううううううううううううう</yoso> </product> <product file_id="a-04"> <yoso>ああああああああああああああああ</yoso> </product> <product file_id="a-05"> <yoso>いいいいいいいいいいいいいいいい</yoso> </product> <product file_id="a-06"> <yoso>うううううううううううううううう</yoso> </product> </index> <index file_id="b"> <product file_id="b-01"> <yoso>ああああああああああああああああ</yoso> </product> <product file_id="b-02"> <yoso>いいいいいいいいいいいいいいいい</yoso> </product> <product file_id="b-03"> <yoso>うううううううううううううううう</yoso> </product> <product file_id="b-04"> <yoso>うううううううううううううううう</yoso> </product> </index> <index file_id="c"> <product file_id="c-01"> <yoso>ああああああああああああああああ</yoso> </product> <product file_id="c-02"> <yoso>いいいいいいいいいいいいいいいい</yoso> </product> <product file_id="c-03"> <yoso>うううううううううううううううう</yoso> </product> </index> </all> ■ind.xsl <?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml" version="1.0" xmlns:redirect="org.apache.xalan.xslt.extensions.Redirect" extension-element-prefixes="redirect"> <xsl:output method="html" encoding="UTF-8"/> <xsl:template match="index"> <!-- 出力ファイル名 --> <xsl:variable name="filename" select="concat('html/',@file_id, '/index.html')"/> <!-- 出力開始 --> <redirect:open select="$filename"/> <redirect:write select="$filename"> <html> <head> <title><xsl:value-of select="@file_id"/></title> </head> <body> <h1><xsl:value-of select="@file_id"/></h1> <xsl:apply-templates /> </body> </html> </redirect:write> <redirect:close select="$filename"/> <!-- 変換報告 --> <xsl:value-of select="concat('『',$filename,'』変換完了')"/> </xsl:template> <xsl:template match="product"> <a> <xsl:attribute name="href"> <xsl:value-of select="concat(@file_id,'.html')" /> </xsl:attribute> <xsl:value-of select="@file_id" /> </a><br /> </xsl:template> </xsl:stylesheet> ■環境 ・xalan-j_2_7_1 ・j2sdk1.4.2_16 ・windowsxp コマンドプロンプトにより下記を実行すると java org.apache.xalan.xslt.Process -in test.xml -xsl ind.xsl html/a/index.html html/b/index.html html/c/index.html が出力されます。 つまりは各カテゴリ(a,b,c)のproduct要素をまとめた インデックスページが出力されます。 ここまでが現状です。 やりたいのは以下です。 上記だとproductの数にかかわらず1ページのindex.htmlに 出力されます。 test.xmlは数が少ないのでいいですが、 仮に1000個あった場合、どんでもないことになってしまうので、 ページ分割をしたいと思っています。(< 1 2 3 4 > みたいな!) ですが、何をどうしたらよいのか皆目見当が付きません。 1ページを10個までとしてそれ以上は次ページに出力みたいなことはできるのでしょうか。 html/a/index.html html/a/index2.html html/a/index3.htmlみたいにです。。。 上記のxslだとmatchするtemplates(index)は3つだけなので、 xalanが書き出すのは3ぺーじだけです。 この書き出す回数をたとえばcount(product div 10)とかにできれば、 なにかみえてきそうなきもするんですが、、、、 長々と申し訳ありませんが、 ご協力お願いします。

    • ベストアンサー
    • XML
  • 基本情報技術者・午前試験免除について

    基本情報技術者・午前試験免除について 今年秋の基本情報技術者試験に向けて勉強中です。 現在、資格スクールに通い午前免除試験に向けて勉強中なのですが、免除試験と実際の午前試験では難易度・出題範囲・合格基準など異なるところはあるのでしょうか?(免除試験が不合格だった場合は10月の本番試験に午前試験も受講しないといけません。) 免除試験が今月で今は過去問題を中心に勉強中ですが、あくまで免除試験ですので実際の午前試験と比べ難易度・出題範囲・合格基準など違うところがあるんじゃないか?と疑問に思い質問しています。 実際に受講した方・勉強中の方から回答を頂けたらと思います。 宜しくお願いします。

  • msxslで「不明な方法」エラー

    msxslで、xmlからhtmlの変換をしたいと思っています。 試しに 「msxsl xmlファイル名 -pi」 と打ったのですが、 ----- Code: 0x80004005 不明 な方法です。 -->processing-instruction('XML-stylesheet'<--) ----- と出て変換されません。 「msxsl xmlファイル名 xslファイル名」 では変換されましたが、xmlファイル内のhref属性からxslファイルを読み取りたいと思っています。 xmlファイルの先頭には <?xml version="1.0" encoding="Shift_JIS"?> <?xml-stylesheet type="text/xsl" href="xslファイル名"?> を記述しています。 googleで検索して同じような症状は見つけたのですが、リンク先が消えていて見れませんでした。 もう一つのリンク先に難しいプログラムが書いてありましたが、意味が分からず挫折しました。 ご存知の方いたら教えてください。

    • ベストアンサー
    • XML
  • 【管理業務主任者】登録実務講習の「修了試験」について

    【管理業務主任者】実務経験が無く、登録実務講習の受講を考えています。この講習の最後にある「修了試験」について教えてください。 講習の中からの出題となっているみたいですが ・制限時間 ・出題数 ・合格基準点 ・合格率 などなど・・・ 一言で言ってしまえば「講習をきちんと受けていれば、まず、不合格となることは無い」ものなのかという事なのです。 以前、別の資格を取得した際の修了試験は講師の方が「此処は重要ですから覚えておいてください」と出題箇所を強調してくれたので難なく合格したのですが・・・ 些細な情報でも結構です。宜しくお願いします。

  • XMLとかで出来ますか?

    XMLもXSLもXSLTも何も知らないので出来るのかわかりませんが。 Aに1・2という情報?属性?を付けて Bに2・3を付けて Cに1を付けて 1が付いているのはA・C 2が付いているのはA・B 3が付いているのはB というように表示するにはどうすればいいでしょう?

    • 締切済み
    • XML