使用XPath在上下文节点下查找节点不起作用(firefox / firebug / javascript)

时间:2010-03-07 23:29:21

标签: javascript firefox dom xpath firebug

我想从网页中提取信息。

页面有m个节点,可以通过.evaluate(“// div [@ class ='news']”,document,....)找到。

对于上述每个节点,其中有3个节点。它们中的每一个都有不同的@class选择器。我想提取这些m-3元组记录。

我尝试按照

中的指示使用.evaluate()函数

https://developer.mozilla.org/en/Introduction_to_using_XPath_in_JavaScript

使用此代码

parentNodes = document.evaluate("//div[@class='news']", document, ....).
while (true){
   var node = parentNodes.iterateNext();
   var child = document.evaluate("//div[@class='title']", node, ....). 
   ...
}

但是,“child”始终分配给文档中的第一个节点,而不是“node”中的第一个节点。

我在firebug控制台中运行它。

有人知道什么是错的吗?

4 个答案:

答案 0 :(得分:18)

您正在对文档进行评估。因此,正在从XML树的根目录评估XPath表达式。此外,如果您希望XPath从当前上下文中选择一个节点,例如在当前节点的子节点中,您应该使用“.//”上下文选择器

答案 1 :(得分:6)

如果使用“/”启动XPath表达式,则从上下文节点的根节点/文档节点开始。因此,不是"//div[@class = 'title']"使用"descendant::div[@class = 'title']",而是选择上下文节点的后代div元素。

答案 2 :(得分:0)

您还可以使用location path selector descendant-or-self。像那样:descendant-or-self::div...用于引用作为上下文传递的节点。

我希望我有所帮助。

答案 3 :(得分:0)

使用.//代替//

XML Path Language specification (XPath), Version 1.0中的解释:

  • //para选择文档根目录的所有para后代,因此选择同一文档中的所有para元素作为上下文 节点

  • .选择上下文节点

  • .//para选择上下文节点的para元素后代

当前的最佳答案是错误的,因为无法对任何其他对象调用.evaluate,而只能对document进行调用。 document.evaluate是正确的。