Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用XPath在上下文节点下查找节点不起作用(firefox/firebug/javascript)_Javascript_Firefox_Dom_Xpath_Firebug - Fatal编程技术网

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

使用XPath在上下文节点下查找节点不起作用(firefox/firebug/javascript),javascript,firefox,dom,xpath,firebug,Javascript,Firefox,Dom,Xpath,Firebug,我想从网页中提取信息 该页面有m个节点,可通过.evaluate(“//div[@class='news']”,document,…)找到 对于上述每个节点,其中有3个节点。它们每个都有不同的@class选择器。我想提取这些M3元组记录 我尝试按照中的说明使用.evaluate()函数 通过使用此代码 parentNodes = document.evaluate("//div[@class='news']", document, ....). while (true){ var nod

我想从网页中提取信息

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

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

我尝试按照中的说明使用.evaluate()函数

通过使用此代码

parentNodes = document.evaluate("//div[@class='news']", document, ....).
while (true){
   var node = parentNodes.iterateNext();
   var child = document.evaluate("//div[@class='title']", node, ....). 
   ...
}
但是,“子节点”始终分配给文档中的第一个节点,而不是“节点”中的第一个节点

我在firebug控制台中运行了这个


有人知道怎么回事吗?

您正在给文档打电话。因此,从XML树的根计算XPath表达式。此外,如果希望XPath从当前上下文中选择节点,例如在当前节点的子节点中,则应使用
/
上下文选择器。

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

也可以使用
后代或self
。类似于:
substant或self::div..
用于启动作为上下文传递的节点的引用


我希望我帮了忙。

/
代替
/

委员会的解释:

  • //para
    选择文档根的所有para子体,从而选择同一文档中作为上下文的所有
    para
    元素 节点

  • 选择上下文节点

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


当前最上面的答案是错误的,因为没有办法在任何其他对象上调用
。evaluate
,而是
document
document.evaluate
是正确的。

BTW
genderant::div[@class='title']
相当于
//div[@class='title']
。前面的“.”是键。我觉得奇怪的是,您可以指定一个上下文,但路径仍然是相对于根的。耸耸肩。@dbreaux它就像在linux shell中一样,
/bin/bash
指向根目录,无论您在哪里,如果当前目录中有另一个名为bin的目录,您必须执行
/bin/bash
bin/bash
如果不是从
文档中,您还能调用
evaluate