我正在使用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")
非常感谢
答案 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
的许多用例。