Google Sheets中XML命名空间下XPath获取最后两个date元素的问题求助
解决Google Sheets中XML命名空间下XPath获取最后/倒数第二个date元素的问题
我之前也踩过Google Sheets里XPath处理带命名空间XML的坑,你的问题核心是XPath的上下文范围没搞对,咱们一步步捋清楚解决办法:
问题根源
你原来写的//*[local-name() = 'date'][last()]之所以返回几乎所有内容,是因为这个写法的逻辑是:遍历XML里的每个节点,找到该节点下local-name为date的子节点中的最后一个——这会返回很多符合条件的节点,而不是全局所有date元素里的最后一个。
至于//*[local-name() = 'date'][last()-1]执行失败,同样是因为上下文错误:last()-1是针对单个父节点下的子节点集合,而不是全局所有date元素的集合,当某个父节点下的date元素不足2个时,就会直接报错。
正确的XPath写法
要先把所有date元素整体选中,再对这个集合取索引,关键是给整个选择器加括号:
获取最后一个
date元素:(//*[local-name()='date'])[last()]获取倒数第二个
date元素:(//*[local-name()='date'])[last()-1]
括号的作用是让XPath先执行//*[local-name()='date']得到所有date元素的集合,再对这个集合使用last()或last()-1来定位对应位置的元素,这样就完全符合你的需求了。
额外验证技巧
你可以先在Google Sheets里用这个公式确认date元素的总数,方便验证索引是否正确:
=IMPORTXML("你的XML链接", "count(//*[local-name()='date'])")
内容的提问来源于stack exchange,提问作者Catalyx
相关产品推荐
相关产品推荐

