如何使用 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() & "]")
然后使用单元格右下角的方块向下拖动公式。
要获取整个页面,请使用不带FILTERXML
的WEBSERVICE
命令。
要使用 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 如何将单元格里面的英文翻译中文到指定的单元格 [转载]