为什么我在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()
应该找到所有以元素为其父元素的注释:即,除了以文档节点为其父元素之外的所有注释。
所以它们并不等价,但第二个表达式应该返回第一个表达式的结果的子集。