如何得到2个属性相减的结果
Posted
技术标签:
【中文标题】如何得到2个属性相减的结果【英文标题】:How to get the result of the substraction of 2 attributes 【发布时间】:2022-01-11 04:20:52 【问题描述】:考虑这个简单的 xml
<books>
<book>
<price ht="100" ttc="120"/>
</book>
<book>
<price ht="150" ttc="180"/>
</book>
</books>
我想列出所有book/price
节点(ttc - ht)的ttc
和ht
的减法
我知道如何获取 ttc://book[price]/price/@ttc
和 ht 相同的方式。
ttc-ht的结果如何获取?
【问题讨论】:
我认为你不能用直接的 xpath 做到这一点。可以用 xquery 吗? 谢谢。我的问题只是理论上的,因为我学习了 xpath。我读过减号运算符存在,但没有找到这样的例子(例如:educba.com/xpath-operators)。 【参考方案1】:试试
//book/price/(./@ttc - ./@ht)
给定您的示例 xml,输出为:
20
30
【讨论】:
【参考方案2】:要检索每个 book
元素的差异,您可以将此 XSL 代码与 身份模板结合使用:
<xsl:template match="book">
<xsl:copy>
<xsl:value-of select="price/@ttc - price/@ht" />
</xsl:copy>
</xsl:template>
它为每个 <book>
元素发出差异。
要获得所有<book>
元素属性的总差,可以使用以下XPath-1.0 表达式:
<xsl:template match="books">
<xsl:copy>
<xsl:value-of select="sum(.//book/price/@ttc) - sum(.//book/price/@ht)" />
</xsl:copy>
</xsl:template>
核心的XPath-1.0表达式是,从<books>
这个级别开始,这个:
sum(.//book/price/@ttc) - sum(.//book/price/@ht)
此表达式从所有@ttc
属性中减去所有@ht
属性。 .//
操作符意味着,从当前轴开始的所有后代元素都被选中。在上面的 XSLT 代码中,当前轴是<books>
。
所以在上面的例子中,结果是50
。
【讨论】:
以上是关于如何得到2个属性相减的结果的主要内容,如果未能解决你的问题,请参考以下文章