2

一連の子のテキスト値で数をカウントできるように XPath クエリを指定することは可能ですか?

これは、たとえば、次の例で最もよく説明されています。

    <badge_counts>
        <gold>2</gold>
        <silver>15</silver>
        <bronze>32</bronze>
    </badge_counts>

したがって、取得するために Xpath を指定することは可能ですかtotal_badges = 49。(から: 2+15+32)

4

2 に答える 2

2

使用:

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
于 2012-04-16T12:58:10.880 に答える
0

どうですか:

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
于 2012-04-16T12:43:34.523 に答える