xpath in the importXML: //comment() vs //*/comment()



为什么我在importXML 中使用xpath获得不同的结果

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

这个问题可能很愚蠢,但我对//comment()根本没有得到任何结果(#N/A(。

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

//node vs //*/node

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

怀疑问题源于相关页面的AJAX性质以及Google Sheets上的IMPORTXML()方法的操作方式。

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

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

这种行为没有意义(当然也不符合XPath规范(,但GS的IMPORTXML方法似乎就是这样处理这个问题的。

根据XPath语言定义,//comment()应该在文档中的任何位置找到所有注释,而//*/comment()应该找到所有以元素为其父元素的注释:即,除了以文档节点为其父元素之外的所有注释。

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

最新更新