我是xsl的初学者。
我需要计算同名(名称不是" name“+”姓氏“)的用户流量总和,例如,计算所有名为"Jonh”的用户的流量之和。而xsl版本应该仅为1.0。
我发现一个有同样问题的话题
http://social.msdn.microsoft.com/Forums/eu/xmlandnetfx/thread/c9f09ba6-1c79-43df-bbc2-3966710fff23
我试着用它:
<span>Total: <xsl:value-of select="sum(//user[contains(name,'Jonh')]../traffic)" /></span>或
<span>Total: <xsl:value-of select="sum(//user[contains(name,'Jonh')]/traffic)" /></span>但没有任何效果。它不计算和。有人能帮我找到解决办法吗。
XML文件
<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet type='text/xsl' href='traffic.xsl'?>
<root>
<user>
<name>Jonh Connor</name>
<traffic>800</traffic>
</user>
<user>
<name>John Kennedy</name>
<traffic>200</traffic>
</user>
<user>
<name>Jack London</name>
<traffic>100</traffic>
</user>
<user>
<name>Sema Schlumberger</name>
<traffic>300</traffic>
</user>
<user>
<name>Jack Vorobey</name>
<traffic>700</traffic>
</user>
<user>
<name>John Lennon</name>
<traffic>500</traffic>
</user>
<user>
<name>John Romero</name>
<traffic>4003</traffic>
</user>
</root>发布于 2012-07-18 06:40:00
你的第二个表情有效..。
<xsl:value-of select="sum(//user[contains(name,'Jonh')]/traffic)" />我测试了这个,它起作用了。请注意名字中明显的错误:“容”和“约翰”。
注意,虽然表达式是正确的,但如果您可以依赖示例输入所隐含的结构,那么当上下文节点是文档根时,您可能更喜欢一个更有效的解决方案:
<xsl:value-of select="sum(root/user/name[contains(.,'Jonh')]/../traffic)" />警告
这种表达形式不区分名称和名称的部分。所以如果你用“Rom”加起来,你会得到4003,因为姓“John Romero”包括“Rom”。如果这不是期望的结果,那么您需要澄清匹配的规则。
发布于 2012-07-18 06:51:36
第二个表达式工作良好。无论如何,我宁愿从表达式中删除contains()函数,因为它可能导致计算中的错误。要只为名为"John“的用户获得结果,请使用下面的示例:
<span>Total: <xsl:value-of select="sum(/root/user[name = 'Jonh']/traffic)" /></span>https://stackoverflow.com/questions/11535452
复制相似问题