如何得到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)的ttcht 的减法

我知道如何获取 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>

它为每个 &lt;book&gt; 元素发出差异。


要获得所有&lt;book&gt; 元素属性的总差,可以使用以下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表达式是,从&lt;books&gt;这个级别开始,这个:

sum(.//book/price/@ttc) - sum(.//book/price/@ht)

此表达式从所有@ttc 属性中减去所有@ht 属性。 .// 操作符意味着,从当前轴开始的所有后代元素都被选中。在上面的 XSLT 代码中,当前轴&lt;books&gt;

所以在上面的例子中,结果是50

【讨论】:

以上是关于如何得到2个属性相减的结果的主要内容,如果未能解决你的问题,请参考以下文章

在SQLserver中如何获得两个日期相减的天数

JAVA大数相减

php中两个时间相减怎么得到年数

SqlServer数据库要求按照两数相减结果的绝对值正序排列怎么写sql语句?

js日期相减求天数 精确到秒

整型和浮点型相减的问题