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

man*_*ova 12 javascript firefox firebug xpath dom

我想从网页中提取信息.

该页面有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, ....). 
   ...
}
Run Code Online (Sandbox Code Playgroud)

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

我在firebug控制台中运行它.

有人知道什么是错的吗?

Ana*_*rin 18

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

  • 那 ”。” 前面是关键。您可以指定上下文对我来说似乎很奇怪,但路径仍然是相对于根的。耸耸肩。 (4认同)
  • @dbreaux就像在Linux shell中一样,无论您身在何处,`/ bin / bash`都指向根目录,如果当前目录中有另一个名为bin的目录,则必须执行`。/ bin / bash`或` bin / bash` (2认同)
  • 如果不是从“document”调用,你还能如何调用“evaluate”? (2认同)

Mar*_*nen 6

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

  • BTW`hynndant :: div [@class ='title']`等同于`.//div [@class ='title']`. (3认同)