- - PR -
XSLTからの最大値から最小値の除算
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2006-06-18 22:08
いつもお世話になっています。
先に質問したグループ化はうまくいったのですが、 そこから先でつまってしまいましたので、質問させてもらいます。 XMLファイルが以下のようになっています <id> <item> <sec>12</sec> <ipaddress>123.1.2.103</ipaddress> </item> <item> <sec>14</sec> <ipaddress>123.1.2.102</ipaddress> </item> <item> <sec>11</sec> <ipaddress>123.1.2.102</ipaddress> </item> <item> <sec>0</sec> <ipaddress>123.1.2.103</ipaddress> </item> <item> <sec>10</sec> <ipaddress>123.1.2.103</ipaddress> </item> <item> <sec>100</sec> <ipaddress>123.1.2.103</ipaddress> </item> <item> <sec>1100</sec> <ipaddress>123.1.2.104</ipaddress> </item> <item> <sec>1000</sec> <ipaddress>123.1.2.104</ipaddress> </item> </id> そこから、IPアドレスでグループ化して、 123.1.2.102 123.1.2.103 123.1.2.104 と重複行を省きます。 そこから各IPのsecの最大値から最小値を引いた値「123.1.2.102の場合は14-11=3」がほしいのですが NaNとなってしまいうまくいきません。 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="/"> <table border="1"> <xsl:for-each select="/log/item[not(ipaddress = preceding-sibling::item/ipaddress)]"> <tr> <td> <xsl:value-of select="ipaddress"/> </td> <td> <xsl:value-of select="sec"/> </td> <td> <xsl:call-template name="calc2"> <xsl:with-param name="arg1"> <xsl:value-of select="sec" /> </xsl:with-param> </xsl:call-template> </td> </tr> </xsl:for-each> </table> </xsl:template> <xsl:template name="calc2"> <xsl:param name="arg1">1</xsl:param> <xsl:value-of select="/log/item/sec[position()='1'] - /log/item[last()]" /> </xsl:template> </xsl:stylesheet> となっています。 もしお分かりの方がいましたら、ご助言をよろしくお願いします |
|
投稿日時: 2006-06-19 10:49
何はともあれ、体を動かして、デバッグ出力
<xsl:value-of select="/log/item/sec[position()='1'] - /log/item[last()]" /> 式の項をバラして 見ましょう COPY-OF SELECT /log/item/sec[position()='1'] COPY-OF SELECT /log/item[last()] ========= と言うより こういう、濃いプログラム処理は XQuery の守備範囲ですが XSLT でやろうとすると、関数の少なさで泣くよ(普通の体力の人なら)。 [ メッセージ編集済み 編集者: MMX 編集日時 2006-06-19 10:53 ] |
|
投稿日時: 2006-06-19 11:24
MMXさま。
ご助言ありがとうございます。 おっしゃられるとおり、体を動かしてデバッグしてみます。 普段はプログラムをゴリゴリ書いているものなので、 毛色の違う、XSLTはなかなか馴染めないし難しいです。 XQuery。 いい機会なので、こちらも勉強してみます。 |
1