16

我有一些 XML 和 XPath 查询。我正在使用雅虎!小部件,所以我使用的是 XPath 1.0。

这是我的 XML 的要点...

<root>
    <cat num="SOURCE">
        <movie>
            <swf>speak.swf</swf> 
            <width>250</width> 
            <height>150</height> 
            <colour>cccccc</colour> 
        </movie>
        <movie>
            <swf>inertia.swf</swf> 
            <width>380</width> 
            <height>130</height> 
            <colour>9a9a9a</colour> 
        </movie>
        <movie>
            <swf>swing.swf</swf> 
            <width>380</width> 
            <height>130</height> 
            <colour>9A9A9A</colour> 
        </movie>
        ....

现在......如果我运行这个查询:

"root/cat/movie/swf"

我得到 42 个结果,所有 'swf' 节点都是正确的。

但是,如果我只想要第 6 个,我希望能够做到:

"root/cat/movie/swf[6]"

但我得到一个包含 0 个节点的列表。

奇怪的是,使用 [1](没有其他值)会产生我所有 42 个节点的列表。

显然,我在这里遗漏了一些非常基本的东西。任何人都看到它是什么?

4

2 回答 2

33

我想知道你的意思是:

"root/cat/movie[6]/swf"

(获取第 6 部电影的 swf)

或者:

"(root/cat/movie/swf)[6]"

(查找所有电影/swf 元素,并选择第 6 个)

当每部电影恰好有一个 swf 时,两者是相同的;如果一部电影有零个或多个 swf 元素,那么这两个查询会略有不同...

于 2009-03-18T11:32:30.603 回答
9
"root/cat/movie/swf[6]"

指上下文中的每个第 6 个<swf>节点。"root/cat/movie"

每个人只有一个<swf>节点。

你的意思是:

"root/cat/movie[6]/swf"
于 2009-03-18T11:32:46.513 回答