4

我开始在 w3cschool 学习 xpath。我正在尝试评估游戏中的玩家数量。(所以计算屏幕名称和 text() 元素/属性)

这是我的示例 xml:

<game>
    <info>
        <name>My Game</name>
        <description>A <i>very</i> interesting game.</description>
        <started>2012-03-01T18:00:00Z</started>
        <players number="2">
            <screenname player="1">Alice</screenname>
            <screenname player="2">Bob</screenname>
        </players>
        <rounds>2</rounds>
        <winner player="2"/>
    </info>
</game>

我使用的 xpath 查询是:

//game/info/players[count(.//screenname/text())]

但我只得到:

"Result is a NodeSet containing 1 element" 

(工具: http: //www.whitebeam.org/library/guide/TechNotes/xpathtestbed.rhtm

是什么导致了这个错误?

4

1 回答 1

11

您的 XPath 查询应该是:

count(/game/info/players/screenname)

您现在使用的 XPath 要求所有game/info/players具有非零数量screenname/text()后代节点的节点。由于只有一个players元素,因此生成的节点集仅包含一个元素。

请记住,XPath 是一系列axis::nodetest[predicate]由步骤 ( ) 分隔的轴节点测试谓词表达式 ( /)。只有axis-nodetest是发送到下一步的结果集的一部分——谓词永远不会出现在结果集中,因为它只用于过滤。

于 2012-05-19T15:19:58.237 回答