我想从网页中提取信息。
页面有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控制台中运行它。
有人知道什么是错的吗?
答案 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
是正确的。