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

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

ただいまの
回答率

90.60%

  • XML

    645questions

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

  • 関数

    210questions

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

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

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 1,394

yamanoharu0129

score 39

課題で、XSL変換で、XML内のデータを絞り込んで該当するデータを表示、プラス、該当するデータの数をカウントするxslを製作しています。出来ないのは、親要素のタグが表示されない点と、カウントをどこに入れればいいのかがわかりません。コードは下記になります。studentsの中にstudentがあり、studentの属性がid、子がnameとpointで、ポイントが60以下のデータを見つけるというものです。この表記だと、課題の完成図には記載されている<students>が表示されません。studentsから指定して、studentsで同様の絞り込みを試すなどをしましたが、Studentからにしかなりません。
また、コードのどこにcountを入れればいいのか、わかりません。絞り込みを行っているstudentの部分に入れてみましたが、カウントはゼロでした。
絞り込みとカウントをどう合わせていれればいいのか、ネットや教科書を見てもわからず困っています。
もう一つ、ここにtableを加えて表示する課題もあり、出来れば、どこに入れればいいのか教えていただきたいです。
XMLが下記です
<students>
    <student id="E99X0001">
        <name>一橋太郎</name>
        <point>85</point>
    </student>
    <student id="E99X0002">
        <name>二宮恵</name>
        <point>75</point>
    </student>
    <student id="E99X0003">
        <name>三島和義</name>
        <point>40</point>
    </student>
    <student id="E99X0004">
        <name>四谷明美</name>
        <point>87</point>
    </student>
    <student id="E99X0005">
        <name>五木弘樹</name>
        <point>60</point>
    </student>
    <student id="E99X0006">
        <name>六本木朱里</name>
        <point>82</point>
    </student>
    <student id="E99X0007">
        <name>七星賢治</name>
        <point>77</point>
    </student>
    <student id="E99X0008">
        <name>八坂ほのか</name>
        <point>62</point>
    </student>
    <student id="E99X0009">
        <name>九鬼雅臣</name>
        <point>45</point>
    </student>
    <student id="E99X0010">
        <name>十川登喜子</name>
        <point>100</point>
    </student>
</students>
コード
XSLが下記です。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" encoding="Shift_JIS" />
    <xsl:template match="/">
        <root>
            <xsl:apply-templates select="students/student[point &lt; 60]" />
        </root>
    </xsl:template>
        <xsl:template match="students">
        <xsl:apply-templates select="student" />    
    </xsl:template>
    <xsl:template match="student">
        <xsl:copy>
            <xsl:apply-templates select="@id" />
            <xsl:apply-templates select="name" />
            <xsl:apply-templates select="point" />
        </xsl:copy>
    </xsl:template>
    <xsl:template match="@id">
        <id>
            <xsl:value-of select="." />
        </id>
    </xsl:template>
    <xsl:template match="name">
        <xsl:copy-of select="." />
    </xsl:template>
    <xsl:template match="point">
        <xsl:copy-of select="." />
    </xsl:template>
</xsl:stylesheet>
完成イメージがこれです。
完成イメージ
追記:課題の一文を見逃していました。<fugoukaku>の挿入も出来ていません。


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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • Tak1wa

    2015/07/01 13:03

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

    キャンセル

回答 1

checkベストアンサー

+1

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

以下のような感じになるのではないでしょうか。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" encoding="Shift_JIS" />
    
    <xsl:template match="/">
      <!--rootはhugoukaku-->
      <hugoukaku>
        <!--studentsにテンプレート適用-->
        <xsl:apply-templates select="students" />
      </hugoukaku>
    </xsl:template>

    <xsl:template match="students">
      <!--不合格の人-->
      <xsl:variable name="hugoukakunohito" select="student[point &lt; 60]" />
      
      <!--ノード構成で出力-->
      <students>
        <xsl:apply-templates select="$hugoukakunohito" />
      </students>
      
      <!--Count出力-->
      <count>
        <xsl:value-of select="count($hugoukakunohito)"/>
      </count>
    </xsl:template>
    
    <xsl:template match="student">
        <xsl:copy>
            <xsl:apply-templates select="@id" />
            <xsl:apply-templates select="name" />
            <xsl:apply-templates select="point" />
        </xsl:copy>
    </xsl:template>
    
    <xsl:template match="@id">
        <id>
            <xsl:value-of select="." />
        </id>
    </xsl:template>
    <xsl:template match="name">
        <xsl:copy-of select="." />
    </xsl:template>
    
    <xsl:template match="point">
        <xsl:copy-of select="." />
    </xsl:template>
</xsl:stylesheet>

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/07/01 19:07

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

    キャンセル

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

  • ただいまの回答率 90.60%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • XML

    645questions

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

  • 関数

    210questions

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