首页 > 解决方案 > Google Sheet 的 XPath 查询是否遵循某个标准?

问题描述

我正在尝试在 Google 电子表格中创建一个股票列表(PH 股票),其中我有一列包含最新价格并将其与我设定的目标价格进行比较。今天下午我一直在尝试解析这个http://phisix-api.appspot.com/stocks/BPI.xml,但我无法获取标签内的值。

通读 XPath 文档,我认为它很简单:=IMPORTXML("http://phisix-api.appspot.com/stocks/BPI.xml", "//stocks/stock/price/amount")遵循树的层次结构并跟踪我需要的标记。但这似乎不起作用。然后我尝试=IMPORTXML("http://phisix-api.appspot.com/stocks/BPI.xml", "//stocks/stock/price/amount/text()")了,因为无论如何我需要的是标签内的文本,但没有骰子。

Google 表格是否遵循特殊的编码/标准或格式?我唯一要做的就是symbol通过=IMPORTXML("http://phisix-api.appspot.com/stocks/BPI.xml", "//@symbol")不使用其他我尝试的方法来获得价值。

我什至尝试了从https://xmltoolbox.appspot.com/xpath_generator.html生成的 Xpath,它是:/stocks[@xmlns="http://phisix-api.appspot.com/phisix-stocks"]/stock[@symbol="BPI"]/price/amount 但它不起作用。

有什么建议吗?

标签: xmlxpathgoogle-sheets-formula

解决方案


有问题的 XML 包含一个默认名称空间。它为 XPath 表达式创建了一个“问题”。

Google Sheets (GS) 似乎只与XPath 1.0兼容。

如果您的环境支持XPath 2.0,则可以使用命名空间通配符,如下所示。

XPath 2.0

/*:stocks/*:stock/*:price/*:amount/text()

XPath 1.0

/*[local-name()='stocks']/*[local-name()='stock']/*[local-name()='price']/*[local-name()='amount']/text()

推荐阅读