是否可以指定一個XPath查詢,使得它可以指望在一組兒童的文本值的數字:指定XPath來計算一組子節點的值?
這最好用一個例子來說明,比如:
<badge_counts>
<gold>2</gold>
<silver>15</silver>
<bronze>32</bronze>
</badge_counts>
因此,是否可以指定一個Xpath,以獲得total_badges = 49
。 (從:2 + 15 + 32)
是否可以指定一個XPath查詢,使得它可以指望在一組兒童的文本值的數字:指定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
感謝您的迴應。但我只是想在這裏測試http://www.xpathtester.com/test,但似乎返回一個錯誤。任何想法爲什麼? – Larry 2012-04-16 13:19:01
@Larry:您可以下載並使用更好的工具 - XPath Visualizer - :http://www.huttar.net/dimitre/XPV/TopXML-XPV.html – 2012-04-16 13:24:10
@Larry:我更新了答案任何人都可以運行並驗證提供的XPath表達式產生所需結果的基於XSLT的驗證。 – 2012-04-16 13:29:25