importXML中的xpath:// comment()与// * / comment()

时间:2018-07-17 05:11:57

标签: xpath google-sheets

为什么我得到different results with xpath in the importXML

//comment() vs //*/comment()

问题也许很愚蠢,但是使用//comment()根本无法获得任何结果(#N / A)。

这可能是一般情况下的问题:

//node vs //*/node

2 个答案:

答案 0 :(得分:1)

由于没有其他人能给出一个好的答案,因此我添加了我的话:

怀疑,这些问题源自所讨论页面的 AJAX性质以及Google表格中的IMPORTXML()方法的运行方式。

使用XPath /查询文档的根目录和选择节点将给我们一个直觉。这样做将返回一个充满JavaScript的单元格,而不返回页面的实际(HTML)源。使用//会导致描述的加载错误。看来,它只是在搜索包含JS的这一单元格,因此无法使用XPath查询//comment()找到注释(或任何其他子节点)。

但是,如果我们查询//*电子表格上的100多个单元格,将填充各种页面元素和源代码片段(这可能是由于加载到页面中的单独源文件中的某些EOL或换行符引起的) 。这样,页面的所有部分都将被加载,包括注释。因此,现在我们可以使用您发现的//*/comment()加载它们(/*//comment()也对我有用)。

此行为没有道理(并且肯定不符合XPath规范),但这似乎是GS的IMPORTXML方法如何解决此问题的方式。

答案 1 :(得分:0)

根据XPath语言定义,//comment()应该在文档中的任何位置找到所有注释,而//*/comment()应该找到所有以其元素为父元素的注释:也就是说,除那些将文档节点作为其父节点。

所以它们不是等效的,但是第二个表达式应该返回第一个表达式的结果的子集。