如何使用FILTERXML计算功能?

时间:2016-03-11 10:02:14

标签: xml import libreoffice libreoffice-calc

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

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

=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")

非常感谢

2 个答案:

答案 0 :(得分:0)

显然FILTERXML会返回找到的第一个匹配项。使用[]语法指定其他匹配项。

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

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

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

要获取整个页面,请使用不WEBSERVICE的{​​{1}}命令。

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

答案 1 :(得分:0)

从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的许多用例。