如何使用 FILTERXML 计算功能?

Posted

技术标签:

【中文标题】如何使用 FILTERXML 计算功能?【英文标题】:How to use FILTERXML calc function? 【发布时间】:2016-03-11 10:02:13 【问题描述】:

我正在使用 LibreOffice 5.1.1.3 (x64),我想实时导入远程 XML 文件。文件网址为:http://www.comune.palermo.it/xmls/VIS_DATASET_AGENZIE.xml

我已经写了这个公式,但是 calc 只导入第一行。

=FILTERXML(WEBSERVICE("http://www.comune.palermo.it/xmls/VIS_DATASET_AGENZIE.xml"),"/main/DATA_RECORD")

正常吗?如何导入 XPath 查询输出的所有行?

在 gdrive 表中,它适用于:

=IMPORTXML("http://www.comune.palermo.it/xmls/VIS_DATASET_AGENZIE.xml","/main/DATA_RECORD")

非常感谢

【问题讨论】:

【参考方案1】:

显然FILTERXML 返回它找到的第一个匹配项。使用[] 语法指定不同的匹配。

要在每一行中获取一个 DATA_RECORD,请在单元格 A1 中输入:

=FILTERXML(WEBSERVICE("http://www.comune.palermo.it/xmls/VIS_DATASET_AGENZIE.xml"),"/main/DATA_RECORD[" & ROW() & "]")

然后使用单元格右下角的方块向下拖动公式。

要获取整个页面,请使用不带FILTERXMLWEBSERVICE 命令。

要使用 LibreOffice 进行更强大的 XML 解析,有必要编写一个宏。有几个可用的 UNO 服务,例如 Andrew Pitonyak's Macro Document 的第 5.38 节。或者,您可以使用 Java 或 Python 编写宏并使用它们的 XML 解析库之一。

【讨论】:

谢谢,但是这样它不是一个很好的工具。此外,它不会将结果拆分为单元格,而是将所有结果都放在一个单元格中。我认为对于这种事情我会继续使用 Gdrive 表 :(【参考方案2】:

从 LibreOffice 5.2.2 开始,LibreOffice 中的 FILTERXML 函数可以在数组上下文中正常工作,从而可以更轻松地访问 XPath 数组结果。

您可以通过选择例如创建这样的公式A1:A10 并在 A1 中插入您的公式 =FILTERXML(WEBSERVICE("http://www.comune.palermo.it/xmls/VIS_DATASET_AGENZIE.xml"),"/main/DATA_RECORD") 并按 CTRL+SHIFT+ENTER

每个单元格现在将包含返回的 XPath 数组的不同条目。相应的错误报告可以在the LibreOffice bug tracker找到。


对于希望将 XML 文档导入 LibreOffice Calc 的其他人。目前还有另一种通过Data->XML Source 对话框的方式,允许选择XML 文档的一部分并将其导入。 LibreOffice 6.0 还进行了部分工作,允许导入外部数据并在应用于文档之前对其进行转换。这可能会取代 WEBSERVICE + FILTERXML 的许多用例。

【讨论】:

以上是关于如何使用 FILTERXML 计算功能?的主要内容,如果未能解决你的问题,请参考以下文章

excel 如何将单元格里面的英文翻译中文到指定的单元格 [转载]

Vuetify - 如何使用数据表搜索功能按动态计算的字段值进行过滤?

我如何使用此函数来计算CHECKSUM

我如何使用模拟功能通过UNC在远程计算机上操纵文件/目录?

如何计算Gower距离权重

在EXCEL中如何使用公式计算今天早上8:00到11:40的用了多少个小时?