【问题标题】:How to use FILTERXML calc function?如何使用 FILTERXML 计算功能?
【发布时间】: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")

非常感谢

【问题讨论】:

    标签: xml import libreoffice libreoffice-calc


    【解决方案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 的许多用例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-08
      • 2011-06-16
      • 1970-01-01
      • 2018-06-10
      • 2021-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多