是否可以指定一个 XPath 查询,以便它可以计算一组子项的文本值处的数字:
这最好用一个例子来解释,例如:
<badge_counts>
<gold>2</gold>
<silver>15</silver>
<bronze>32</bronze>
</badge_counts>
因此,是否可以指定 Xpath 来获取total_badges = 49
. (来自:2+15+32)
使用:
sum(/*/*)
这将生成 XML 文档中作为文档顶部元素的子元素的所有元素的字符串值转换为数字的总和。
作为一项规则:尽可能避免使用//
伪运算符,因为这可能会导致不必要的低效评估——在这种情况下,许多 XPath 引擎会完全遍历以上下文节点为根的整个树。
基于 XSLT 的验证:
这种转变:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:value-of select="sum(/*/*)"/>
</xsl:template>
</xsl:stylesheet>
应用于提供的 XML 文档时:
<badge_counts>
<gold>2</gold>
<silver>15</silver>
<bronze>32</bronze>
</badge_counts>
计算 XPath 表达式并输出结果:
49
怎么样:
sum(//badge_counts/*/text())
Python 示例:
>>> from lxml import etree
>>> doc = etree.XML("""<badge_counts><gold>2</gold><silver>15</silver><bronze>32</bronze></badge_counts>""")
>>> doc.xpath('//badge_counts/*/text()')
['2', '15', '32']
>>> doc.xpath('sum(//badge_counts/*/text())')
49.0