XSLTに関する質問です。


下記のようなXMLがある時、
<data>
<a>1</a>
<b>2</b>
</data>
<data>
<a>3</a>
<b>4</b>
</data>
a * b の合計はどのように表記するのでしょうか。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:--
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答3件)

id:dev_zer0 No.1

回答回数332ベストアンサー獲得回数25

ポイント10pt

http://www.atmarkit.co.jp/fxml/askxmlexpert/008calc/08calc.html

XML文書の中の数字で計算したい

<xsl:value-of select=”number(a)*number(b)”/>で求められます。


XMLではルートノードを複数持つことが出来ないので勝手に<hoge>をルートノードと仮定します

入力XML

<hoge>

<data>

<a>1</a>

<b>2</b>

</data>

<data>

<a>3</a>

<b>4</b>

</data>

</hoge>

以下のXSLはdataタグ配下のa*bの値をCSV形式で出力します

<?xml version=”1.0”?>

<xsl:stylesheet xmlns:xsl=”http://www.w3.org/1999/XSL/Transform” version=”1.0”>

<xsl:output method=”text”/>

<xsl:template match=”hoge”>

<xsl:for-each select=”data”>

<xsl:value-of select=”number(a)*number(b)”/>

<xsl:text>,</xsl:text>

</xsl:for-each>

</xsl:template>

</xsl:stylesheet>

id:jun0429

乗算は大丈夫です。

各a*bの合計を求めたいです。

2006/02/21 20:01:17
id:ttamo No.2

回答回数175ベストアンサー獲得回数29

ポイント25pt

http://www.atmarkit.co.jp/fxml/tanpatsu/xslt/xslt05.html

サンプルで覚えるXSLTプログラミング

XSLT は初めて使ってみましたが、いちおう以下ので 14 と出るみたいです。


<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<xsl:template match="alldata">

<xsl:variable name="goukei">

<xsl:call-template name="wa">

<xsl:with-param name="left_data" select="count(//data)"/>

</xsl:call-template>

</xsl:variable>

<xsl:value-of select="$goukei"/>

</xsl:template>


<xsl:template name="wa">

<xsl:param name="left_data" select="0"/>

<xsl:param name="current_sum" select="0"/>

<xsl:choose>

<xsl:when test="$left_data &lt; 1">

<xsl:value-of select="$current_sum"/>

</xsl:when>

<xsl:otherwise>

<xsl:variable name="total">

<xsl:call-template name="wa">

<xsl:with-param name="left_data" select="$left_data - 1"/>

<xsl:with-param name="current_sum" select="$current_sum + data[$left_data]/a * data[$left_data]/b"/>

</xsl:call-template>

</xsl:variable>

<xsl:value-of select="$total"/>

</xsl:otherwise>

</xsl:choose>

</xsl:template>


</xsl:stylesheet>

id:jun0429

無事出力されました。

ありがとうございます。

2006/02/22 06:12:24
id:rna No.3

回答回数5ベストアンサー獲得回数0

ポイント25pt

http://d.hatena.ne.jp/rna/20060221/p3

児童小銃 - question:1140500672 の解答例

とりあえずこんな感じで。


XSLT 1.0 の変数はテンプレートの呼び出し中しか値が保持されず、プログラミング言語で言う関数の戻り値みたいなのもないので、テンプレートの再帰呼び出しでパラメータを渡していって呼び出した先で計算を続行する、みたいな形にします。めんどくさいですね。


拡張関数を定義していいのなら逃げ道はありますが。。。

id:jun0429

ありがとうございます。

正しく表示されました。

2006/02/22 06:16:55

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません