xslt求和

happythink 2009-04-30 11:23:25
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="topic.xsl"?>

<List total="2" page="1" size="2" max-page="1">
<Item>
<Shopid>26101039</Shopid>
<Shopname>家乐福</Shopname>
<Mchcode>10000020001</Mchcode>
<Mchid>188841</Mchid>
<Num>2.0</Num>
<Price>2.1</Price>
<Spec>355毫升</Spec>
<Mchname>健怡可口可乐 355ml</Mchname>
<Remark></Remark>
<Integral>0.021</Integral>
</Item>
<Item>
<Shopid>26101010</Shopid>
<Shopname>麦客隆</Shopname>
<Mchcode>312477</Mchcode>
<Mchid>5698</Mchid>
<Num>1.0</Num>
<Price>4.6</Price>
<Spec>1500毫升</Spec>
<Mchname>百事可乐 1500ml</Mchname>
<Remark></Remark>
<Integral>0.046</Integral>
</Item>
</List>

上面的xml文件,怎么通过xslt求出所有商品 Price*Num 的总和呢?
...全文
494 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
AiZoey 2009-06-07
  • 打赏
  • 举报
回复
我把你的代码xsl与xml关联后 在Altova XMLSpy里面浏览器里面提示:
 到变量或参数 'itemPrices'的引用必须到节点列表求值。

怎么解决啊?
kaleon 2009-05-04
  • 打赏
  • 举报
回复
不行是指什么不行?

xml源文件

<List total="2" page="1" size="2" max-page="1">
<Item>
<Shopid>26101039</Shopid>
<Shopname>家乐福</Shopname>
<Mchcode>10000020001</Mchcode>
<Mchid>188841</Mchid>
<Num>2.0</Num>
<Price>2.1</Price>
<Spec>355毫升</Spec>
<Mchname>健怡可口可乐 355ml</Mchname>
<Remark></Remark>
<Integral>0.021</Integral>
</Item>
<Item>
<Shopid>26101010</Shopid>
<Shopname>麦客隆</Shopname>
<Mchcode>312477</Mchcode>
<Mchid>5698</Mchid>
<Num>1.0</Num>
<Price>4.6</Price>
<Spec>1500毫升</Spec>
<Mchname>百事可乐 1500ml</Mchname>
<Remark></Remark>
<Integral>0.046</Integral>
</Item>
</List>


xslt脚本:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions" exclude-result-prefixes="xs fn">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<xsl:variable name="itemPrices">
<xsl:for-each select="//Item">
<price>
<xsl:value-of select="number(./Num/text())*number(./Price/text())"/>
</price>
</xsl:for-each>
</xsl:variable>
<total>
<xsl:value-of select="sum($itemPrices/price)"/>
</total>
</xsl:template>
</xsl:stylesheet>


结果:

<?xml version="1.0" encoding="UTF-8"?>
<total>8.8</total>
happythink 2009-05-04
  • 打赏
  • 举报
回复
kaleon
你的方法我试了怎么不行啊?
街头小贩 2009-04-30
  • 打赏
  • 举报
回复

8.9 XSLT运算符

XSLT提供了许多运算符。这些运算符可以分为算术运算符、逻辑运算符和关系运算符。本节将对主要的几种运算符进行简要介绍。
8.9.1 算术运算符

XSLT的算术运算符有以下几种。

—“+”,表示加法运算。例如a + b。

—“-”,表示减法运算。例如a – b。

—“*”,表示乘法运算。例如a * b。

—“div”,表示除法运算。例如a div b。注意,除法运算不能使用“/”。

—“mod”,表示取模运算。例如a mod b。
8.9.2 逻辑运算符

XSLT的逻辑运算符有以下两种。

—“and”,表示逻辑与。例如true() and false()。

—“or”,表示逻辑或。例如true() or false()。
8.9.3 比较运算符

XSLT的比较运算符有以下两种。

— “=”,用于判断两个XPath表达式是否相等。例如a = b。

— “!=”,用于判断两个XPath表达式是否不等。例如a != b。

— “<”,用于判断第一个XPath表达式是否小于第二个。但是,此处的“<”需要使用“<”来代替。例如a < b。

— “<=”,用于判断第一个XPath表达式是否不大于第二个。此处的“<”需要使用“<”来代替。例如a <= b。

— “>”,用于判断第一个XPath表达式是否大于第二个。但是,此处的“>”需要使用“>”来代替。例如a > b。

— “>=”,用于判断第一个XPath表达式是否不小于第二个。此处的“>”需要使用“>”来代替。例如a >= b。


kaleon 2009-04-30
  • 打赏
  • 举报
回复

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions" exclude-result-prefixes="xs fn">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<xsl:variable name="itemPrices">
<xsl:for-each select="//Item">
<price>
<xsl:value-of select="number(./Num/text())+number(./Price/text())"/>
</price>
</xsl:for-each>
</xsl:variable>
<total>
<xsl:value-of select="sum($itemPrices/price)"/>
</total>
</xsl:template>
</xsl:stylesheet>
hookee 2009-04-30
  • 打赏
  • 举报
回复
分析器支持nodeset()的话,参考
http://blog.davidkaspar.com/archives/2003/10/xslt-sum-of-products-from-multiple-nodes.php
街头小贩 2009-04-30
  • 打赏
  • 举报
回复
如果你的XML如下:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="topic.xsl"?>

<List total="2" page="1" size="2" max-page="1">
<Item>
<Shopid>26101039</Shopid>
<Shopname>家乐福</Shopname>
<Mchcode>10000020001</Mchcode>
<Mchid>188841</Mchid>
<Num>2.0</Num>
<Price>2.1</Price>
<Spec>355毫升</Spec>
<Mchname>健怡可口可乐 355ml</Mchname>
<Remark></Remark>
<Integral>0.021</Integral>
<总额>2.1*2.0</总额>
</Item>
<Item>
<Shopid>26101010</Shopid>
<Shopname>麦客隆</Shopname>
<Mchcode>312477</Mchcode>
<Mchid>5698</Mchid>
<Num>1.0</Num>
<Price>4.6</Price>
<Spec>1500毫升</Spec>
<Mchname>百事可乐 1500ml</Mchname>
<Remark></Remark>
<Integral>0.046</Integral>
<总额>4.6*1.0</总额>
</Item>
</List>

如果你要算:(2.1*2.0)+(4.6*1.0)可以用sum函数!反之你只能自已写表达式了
街头小贩 2009-04-30
  • 打赏
  • 举报
回复
你的item有总价格(Price*Num)么?没有你只能自已算了!有的话可以用sum函数
happythink 2009-04-30
  • 打赏
  • 举报
回复
楼上没理解我的意思,我是想计算出所有商品的总金额

8,906

社区成员

发帖
与我相关
我的任务
社区描述
XML/XSL相关问题讨论专区
社区管理员
  • XML/XSL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧