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

标签 xml xpath

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

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

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

果然我知道如何对值求和:sum(//score) 或属性 sum(//score/@cnt) 但我无法弄清楚如何将这两个放在一起。这是怎么做到的?

最佳答案

使用单个 XPath 1.0 表达式无法进行此类计算。如果可以使用 XPath 2.0,就可以做到:

sum(for $x in /scores/score return $x * $x/@cnt)

编辑 一个更短的等效路径表达式,尽管更隐晦,是

sum(/scores/score/(. * @cnt))

感谢 Ian Roberts 的建议。

prove it 的 XSLT 样式表:

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
    <xsl:output method="xml" omit-xml-declaration="yes" encoding="UTF-8" indent="yes" />

    <xsl:template match="/">
      <result>
          <xsl:value-of select="sum(for $x in /scores/score return $x * $x/@cnt)"/>
      </result>
    </xsl:template>

</xsl:transform>

结果是

<result>70</result>

关于xml - 使用 XPATH 乘以节点值和属性的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29604237/

相关文章:

xml - 使用 WebService 将产品添加到 PrestaShop 1.6.0.9

java - wsimport - 未定义模式描述符

mysql - 使用 SQL 将 XML 导入 phpMyAdmin

java - 如何生成具有可变值节点的 XML

java - 在 Android 应用程序中发送/接收短信(作为默认短信应用程序)

java - 如何循环遍历List<WebElement>

PHP解析xml问题与获取值

java - Selenium:模式内容中的按钮不可点击

xml - Powershell选择XML节点,其中属性包含在数组中

python - 有没有一种方法可以使用 Python 计算 xml 文件中某个名称的元素数量?