Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 使用XPATH乘以节点值和属性的总和_Xml_Xpath - Fatal编程技术网

Xml 使用XPATH乘以节点值和属性的总和

Xml 使用XPATH乘以节点值和属性的总和,xml,xpath,Xml,Xpath,假设您有一个如下所示的XML: <scores> <score cnt="2">10</score> <score cnt="0">20</score> <score cnt="1">50</score> </scores> 10 20 50 我想得到的是总数,应该是70=(2*10+1*50)。因此,将节点值与其属性相乘,得到所有节点的最终和 当然,我知道如何将值求和:

假设您有一个如下所示的XML:

<scores>
    <score cnt="2">10</score>
    <score cnt="0">20</score>
    <score cnt="1">50</score>
</scores>

10
20
50
我想得到的是总数,应该是70=(2*10+1*50)。因此,将节点值与其属性相乘,得到所有节点的最终和


当然,我知道如何将值求和:
sum(//score)
,或attributes
sum(//score/@cnt)
,但我不知道如何将这两个值组合在一起。如何做到这一点?

使用单个XPath 1.0表达式无法进行这种计算。如果可以使用XPath 2.0,则可以执行以下操作:

sum(for $x in /scores/score return $x * $x/@cnt)
EDIT一个更短的等价路径表达式,尽管更为神秘,但是

sum(/scores/score/(. * @cnt))
感谢伊恩·罗伯茨的建议

XSLT样式表用于:


结果将是

<result>70</result>
70
在xpath 1.0中不可能<代码>总和(/scores/score/(.*@cnt))也应该起作用,但我认为的显式
更清晰。
<result>70</result>