XPath 中求和与积的聚合函数

2023-12-06

类似于这个问题(http://stackoverflow.com/q/1333558/948404)我想使用XPath来计算结构中产品的总和,如下所示:

<items>
    <item>
        <value>1.0</value>
        <quantity>3</quantity>
    </item>
    <item>
        <value>2.5</value>
        <quantity>2</quantity>
    </item>
    <!-- ... -->
</items>

是否有一个 XPath 表达式可以计算每个项目的乘积之和value and quantity?

Update:该解决方案必须与 PHP 的 XSLTProcessor 类一起使用,这意味着它可能必须兼容 XSLT 1.0。这就是为什么我尚未接受使用 XSLT 2.0 的两个可能正确的答案。我既无法在 PHP 实现中测试它们,也无法在浏览器中测试它们,也无法在 w3schools 的 Tryit 编辑器 [1] 中测试它们。对不起!


使用此 XPath 2.0 表达式:

sum(/items/item/(value * quantity))

这是一个 XSLT 2.0 转换作为验证:

<xsl:stylesheet version="2.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text"/>

    <xsl:template match="/">
        <xsl:sequence select="sum(/items/item/(value * quantity))"/>
    </xsl:template>
</xsl:stylesheet>

当此转换应用于提供的 XML 文档时:

<items>
    <item>
        <value>1.0</value>
        <quantity>3</quantity>
    </item>
    <item>
        <value>2.5</value>
        <quantity>2</quantity>
    </item>
    <!-- ... -->
</items>

计算 XPath 表达式并输出计算结果:

8

解释:

在 XPath 2.0 中,定位步骤是合法的

/(expression),

or even

/someFunction(argumentList)


二. XSLT 1.0 解决方案:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:template match="/*">
  <xsl:call-template name="sumProducts">
    <xsl:with-param name="pNodes" select="item"/>
  </xsl:call-template>
 </xsl:template>

 <xsl:template name="sumProducts">
   <xsl:param name="pNodes" select="/.."/>
   <xsl:param name="pAccum" select="0"/>

   <xsl:choose>
    <xsl:when test="not($pNodes)">
     <xsl:value-of select="$pAccum"/>
    </xsl:when>
    <xsl:otherwise>
     <xsl:call-template name="sumProducts">
      <xsl:with-param name="pNodes" select="$pNodes[position() >1]"/>
      <xsl:with-param name="pAccum" select=
      "$pAccum + $pNodes[1]/value * $pNodes[1]/quantity"/>
     </xsl:call-template>
    </xsl:otherwise>
   </xsl:choose>
 </xsl:template>
</xsl:stylesheet>

当此转换应用于提供的 XML 文档(上面)时,再次生成所需的正确结果:

8

Do note: 此类问题很容易解决FXSL 库。调用的模板是transform-and-sum .

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

XPath 中求和与积的聚合函数 的相关文章

随机推荐

  • 使用 .DrawToBitmap - 如何更改图像的分辨率?

    我在用着DrawToBitmap将一些标签保存为图像 我想知道如何改变这些图像的分辨率 有什么办法吗 假设我有一个带有文本的标签 我想将其渲染为图像文件 不发布完整代码 this label1 new System Windows Form
  • 使用 LibGit2Sharp 进行 Bitbucket 身份验证

    我使用 CSharp Bitbucket 库通过 Bitbucket 对用户进行身份验证 https github com scottksmith95 CSharp Bitbucket 身份验证工作正常 我得到了令牌值和令牌秘密值 我已经在
  • 无法在 xcode 中调整视图大小

    我似乎无法调整视图大小以填充模拟器中的屏幕 请参见下面的屏幕截图 注意顶部和底部的黑线 有谁知道我如何解决这个问题 Thanks Matt 此问题的原因是您尚未在项目中添加启动图像或故事板 您需要将启动图像添加到您的xcasset文件夹或者
  • C++ 中 i++++ 增量是什么

    谁能告诉我c 中i 自增的过程是什么 这是一个语法错误 使用最大咀嚼规则 i 被标记为 i 最后 是二元加法运算符 但显然它没有两个操作数 这会导致解析器错误 EDIT 评论中的问题 我们可以吗i j 它被标记为 i j 这又是一个语法错误
  • 跨多种语言的语义相似度

    我正在使用词嵌入来查找两个句子之间的相似性 使用 word2vec 如果一个句子是英语 另一个句子是荷兰语 我还可以获得相似性度量 尽管不是很好 所以我开始想知道是否可以计算两种不同语言的两个句子之间的相似度 没有明确的翻译 特别是如果这些
  • 通过命令行控制劳特巴赫

    我的条件是我必须将多个输出文件一一刷新到 mpc 控制器 我们使用lauterbach的GUI来进行软件的烧写和运行 现在我想通过 gt 命令行参数做同样的事情 请有人向我解释一下通过命令提示符控制劳特巴赫需要什么 我想使用 Lauterb
  • 使用 jQuery 切换下一个元素

    我有一个问题this元素 我知道如何this工作中 我有很多这样的 html 结构 当我点击 a 按钮时 带有 class 的 divextra options必须显示 但由于我在整个过程中重复了很多相同的 html 结构 因此当我单击按钮
  • 为什么我的自定义字体在某些浏览器中存在位置偏移?

    在我的网站 www monkey touch com 上工作时 我开始在标题和其他几个地方使用自定义字体 它看起来很棒 并且由于 font squirrel 它可以在所有浏览器上运行 然而 我后来意识到字体在某些浏览器中的呈现方式有所不同
  • 应用程序小部件中的 AdapterViewFlipper:setPendingIntentTemplate() 和 setOnClickFillInIntent() 不起作用

    我正在将应用程序小部件中的 ListView 更改为 AdapterViewFlipper 问题是 我需要处理对某个项目的点击 它可以完美地使用 setPendingIntentTemplate 将待处理的意图模板设置为整个 ListVie
  • 将 UIImageView 转换为 UIImage

    我正在处理图像 我有大量图像 并且我正在从服务器实时下载它们 然后使用AsyncImageView类 但知道我正在使用自定义类 这需要UIImage代替UIImageView 问题 有什么好的方法可以转换吗UIImageView to UI
  • 按下后退按钮时完成所有活动

    我有一个 Android 应用程序 有 3 个活动 对于第一个和第二个活动 我希望后退按钮退出所有现有活动 此时后退按钮正在退出它启动的活动 但如果在第二个活动上按下后退按钮 则将显示第一个活动 而不是退出应用程序 因为第一个活动会导致第二
  • Cloud Firestore 相当于实时数据库“.info/connected”参考吗?

    我已开始从 Firebase 实时数据库迁移到 Cloud Firestore 我需要一种方法 让应用程序在 Firestore 的连接状态发生变化时 从在线到离线 反之亦然 收到警报 为了清楚起见 我不需要将其写入数据库以供应用程序的其他
  • 与其他人分享来自 mpldatacursor 的图像

    我正在使用这个例子当鼠标悬停在数据上时如何显示数据标签制作当您将鼠标悬停在点上时会出现数据的图像 这确实很好用 但是有什么方法可以保存它以便我可以将图像发送给其他人吗 我不确定哪些格式支持 工具提示 但 pdf 和 svg 都支持 也许还有
  • Sql Server 2005 全文搜索中的干扰词

    我正在尝试对数据库中的一系列名称进行全文搜索 这是我第一次尝试使用全文搜索 目前 我输入输入的搜索字符串 并在每个术语之间放置一个 NEAR 条件 即输入的短语 Kings of Leon 变为 Kings NEAR of NEAR Leo
  • Lotus Notes XPage 用于设计,Oracle(或其他 RDBMS)用于数据

    我计划使用 XPage 进行设计 加上 Lotus Notes Elements 来制作一个 Web 应用程序 但我不会将数据存储在 Lotus Notes 中 而是将数据存储在 RDBMS 特别是 Oracle 数据库 中 正如您所看到的
  • 如何在 Python 中检查文件大小?

    如何在Python中获取文件的大小 Use os path getsize gt gt gt import os gt gt gt os path getsize path to file mp3 2071611 输出以字节为单位
  • 我需要在添加新组件时动态调整 JPanel 的大小

    我需要让用户向我的 JFrame 添加更多文本字段 因此一旦框架的大小超过其原始值 滚动窗格就会介入 由于我无法将 JScrollPane 添加到 JFrame 以启用滚动 所以我决定将 JPanel 放在JFrame 并将 JPanel
  • Docker 身份验证:无法获取匿名令牌

    我的 gitlab 运行程序中出现以下错误 错误 授权失败 无法获取匿名令牌 获取 https auth ipv6 docker com token scope repository 3Alibrary 2Fnode 3Apull serv
  • std::async 和对象复制

    我正在尝试std async最终得到如下代码 class obj public int val obj int a val a cout lt lt new obj lt lt endl obj cout lt lt delete obj
  • XPath 中求和与积的聚合函数

    类似于这个问题 http stackoverflow com q 1333558 948404 我想使用XPath来计算结构中产品的总和 如下所示