为什么我得到different results with xpath in the importXML
//comment() vs //*/comment()
问题也许很愚蠢,但是使用//comment()
根本无法获得任何结果(#N / A)。
这可能是一般情况下的问题:
//node vs //*/node
答案 0 :(得分:1)
由于没有其他人能给出一个好的答案,因此我添加了我的话:
我怀疑,这些问题源自所讨论页面的 AJAX性质以及Google表格中的IMPORTXML()
方法的运行方式。
使用XPath /
查询文档的根目录和选择节点将给我们一个直觉。这样做将返回一个充满JavaScript的单元格,而不返回页面的实际(HTML)源。使用//
会导致描述的加载错误。看来,它只是在搜索包含JS的这一单元格,因此无法使用XPath查询//comment()
找到注释(或任何其他子节点)。
但是,如果我们查询//*
电子表格上的100多个单元格,将填充各种页面元素和源代码片段(这可能是由于加载到页面中的单独源文件中的某些EOL或换行符引起的) 。这样,页面的所有部分都将被加载,包括注释。因此,现在我们可以使用您发现的//*/comment()
加载它们(/*//comment()
也对我有用)。
此行为没有道理(并且肯定不符合XPath规范),但这似乎是GS的IMPORTXML
方法如何解决此问题的方式。
答案 1 :(得分:0)
根据XPath语言定义,//comment()
应该在文档中的任何位置找到所有注释,而//*/comment()
应该找到所有以其元素为父元素的注释:也就是说,除那些将文档节点作为其父节点。
所以它们不是等效的,但是第二个表达式应该返回第一个表达式的结果的子集。