質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Q&A

解決済

1回答

5909閲覧

XMLをXSL変換で条件を絞りこんで、絞り込んだ数をcountする

yamanoharu0129

総合スコア47

XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

0グッド

1クリップ

投稿2015/07/01 03:39

編集2015/07/01 04:16

課題で、XSL変換で、XML内のデータを絞り込んで該当するデータを表示、プラス、該当するデータの数をカウントするxslを製作しています。出来ないのは、親要素のタグが表示されない点と、カウントをどこに入れればいいのかがわかりません。コードは下記になります。studentsの中にstudentがあり、studentの属性がid、子がnameとpointで、ポイントが60以下のデータを見つけるというものです。この表記だと、課題の完成図には記載されている<students>が表示されません。studentsから指定して、studentsで同様の絞り込みを試すなどをしましたが、Studentからにしかなりません。
また、コードのどこにcountを入れればいいのか、わかりません。絞り込みを行っているstudentの部分に入れてみましたが、カウントはゼロでした。
絞り込みとカウントをどう合わせていれればいいのか、ネットや教科書を見てもわからず困っています。
もう一つ、ここにtableを加えて表示する課題もあり、出来れば、どこに入れればいいのか教えていただきたいです。
XMLが下記です

lang

1<students> 2 <student id="E99X0001"> 3 <name>一橋太郎</name> 4 <point>85</point> 5 </student> 6 <student id="E99X0002"> 7 <name>二宮恵</name> 8 <point>75</point> 9 </student> 10 <student id="E99X0003"> 11 <name>三島和義</name> 12 <point>40</point> 13 </student> 14 <student id="E99X0004"> 15 <name>四谷明美</name> 16 <point>87</point> 17 </student> 18 <student id="E99X0005"> 19 <name>五木弘樹</name> 20 <point>60</point> 21 </student> 22 <student id="E99X0006"> 23 <name>六本木朱里</name> 24 <point>82</point> 25 </student> 26 <student id="E99X0007"> 27 <name>七星賢治</name> 28 <point>77</point> 29 </student> 30 <student id="E99X0008"> 31 <name>八坂ほのか</name> 32 <point>62</point> 33 </student> 34 <student id="E99X0009"> 35 <name>九鬼雅臣</name> 36 <point>45</point> 37 </student> 38 <student id="E99X0010"> 39 <name>十川登喜子</name> 40 <point>100</point> 41 </student> 42</students> 43コード

XSLが下記です。

lang

1 2<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 3 <xsl:output method="xml" encoding="Shift_JIS" /> 4 <xsl:template match="/"> 5 <root> 6 <xsl:apply-templates select="students/student[point &lt; 60]" /> 7 </root> 8 </xsl:template> 9 <xsl:template match="students"> 10 <xsl:apply-templates select="student" /> 11 </xsl:template> 12 <xsl:template match="student"> 13 <xsl:copy> 14 <xsl:apply-templates select="@id" /> 15 <xsl:apply-templates select="name" /> 16 <xsl:apply-templates select="point" /> 17 </xsl:copy> 18 </xsl:template> 19 <xsl:template match="@id"> 20 <id> 21 <xsl:value-of select="." /> 22 </id> 23 </xsl:template> 24 <xsl:template match="name"> 25 <xsl:copy-of select="." /> 26 </xsl:template> 27 <xsl:template match="point"> 28 <xsl:copy-of select="." /> 29 </xsl:template> 30</xsl:stylesheet>

完成イメージがこれです。
![完成イメージ]WIDTH:600

追記:課題の一文を見逃していました。<fugoukaku>の挿入も出来ていません。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Tak1wa

2015/07/01 04:03

データを絞り込んで該当するデータを表示 → どういう形式で表示したいのでしょうか。カウントの表示の仕方と併せて教えてください。期待するアウトプットを追記してもらえるとわかりやすいです。
guest

回答1

0

ベストアンサー

こんにちは。
Tableが云々の件は詳細が不明なのでここでは触れません。

以下のような感じになるのではないでしょうか。

lang

1<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 2 <xsl:output method="xml" encoding="Shift_JIS" /> 3 4 <xsl:template match="/"> 5 <!--rootはhugoukaku--> 6 <hugoukaku> 7 <!--studentsにテンプレート適用--> 8 <xsl:apply-templates select="students" /> 9 </hugoukaku> 10 </xsl:template> 11 12 <xsl:template match="students"> 13 <!--不合格の人--> 14 <xsl:variable name="hugoukakunohito" select="student[point &lt; 60]" /> 15 16 <!--ノード構成で出力--> 17 <students> 18 <xsl:apply-templates select="$hugoukakunohito" /> 19 </students> 20 21 <!--Count出力--> 22 <count> 23 <xsl:value-of select="count($hugoukakunohito)"/> 24 </count> 25 </xsl:template> 26 27 <xsl:template match="student"> 28 <xsl:copy> 29 <xsl:apply-templates select="@id" /> 30 <xsl:apply-templates select="name" /> 31 <xsl:apply-templates select="point" /> 32 </xsl:copy> 33 </xsl:template> 34 35 <xsl:template match="@id"> 36 <id> 37 <xsl:value-of select="." /> 38 </id> 39 </xsl:template> 40 <xsl:template match="name"> 41 <xsl:copy-of select="." /> 42 </xsl:template> 43 44 <xsl:template match="point"> 45 <xsl:copy-of select="." /> 46 </xsl:template> 47</xsl:stylesheet>

投稿2015/07/01 04:38

Tak1wa

総合スコア4791

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yamanoharu0129

2015/07/01 10:07

今までの授業でいまいち理解しきれていなかった点も理解出来ました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問