如何选择xpath 1.0中的第n项?

发布于 2024-07-15 10:05:43 字数 1172 浏览 6 评论 0原文

我有一些 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 个节点的列表。

显然我在这里遗漏了一些非常基本的东西。 有人看出它是什么吗?

I have some XML and an XPath query. I'm using Yahoo! widgets, so I'm using XPath 1.0.

Here's the gist of my 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>
        ....

Now... if I run this query:

"root/cat/movie/swf"

I get 42 results, all 'swf' nodes which is correct.

If however, I just want the 6th one, I'd like to be able to do:

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

But I get a list containing 0 nodes.

Weirdly, using [1] (And no other value) yields my list of all 42 nodes.

Clearly I'm missing something quite fundamental here. Anyone see what it is?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

池木 2024-07-22 10:05:44

我不知道你的意思是:(

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

获取第6部电影的swf)

还是:(

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

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

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

I wonder if you mean:

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

(gets the swf of the 6th movie)

or alternatively:

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

(finds all the movie/swf elements, and selects the 6th)

When each movie has exactly one swf, the two are the same; if a movie has zero or multiple swf elements, they the two queries are subtly different...

表情可笑 2024-07-22 10:05:44
"root/cat/movie/swf[6]"

引用 "root/cat/movie" 上下文中的每个第 6 个 节点。

每个节点只有一个 节点。

你的意思是:

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

refers to each 6th <swf> node in "root/cat/movie" context.

You have only one <swf> node each.

What you mean is:

"root/cat/movie[6]/swf"
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文