Google Script XML解析报错:无法找到getRootElement函数求助
解决Google Script xPath函数的TypeError: Cannot find function getRootElement问题
嘿,我来帮你搞定这个报错的问题!你遇到的TypeError: Cannot find function getRootElement in object https://drive.google.com/uc?id=...,其实根源很简单:你传给xPath函数的是Drive文件的URL字符串,但这个函数本来要的是已经解析好的XML文档对象。
为啥会报错?
看原脚本里xPath函数的第一行代码:
var root = xmlFile.getRootElement();
getRootElement()是Google Apps Script里XmlService.Document对象的专属方法,而你从E2单元格传进去的是一串URL文本(字符串类型),字符串哪有这个方法呀?自然就触发类型错误了。
两种快速解决方法
方法1:直接改公式,先解析XML再传入
不用改脚本代码,只要把公式改成先调用readRemoteXML把URL转成XML对象,再传给xPath就行:
=xPath("@url", readRemoteXML(E2))
方法2:修改xPath函数,让它自动识别URL
如果你想保持=xPath("@url", E2)这种简洁的调用方式,可以给xPath函数加个小判断,自动处理URL字符串:
function xPath(path, xmlFile) { // 新增:如果传入的是字符串(也就是URL),先解析成XML文档 if (typeof xmlFile === 'string') { xmlFile = readRemoteXML(xmlFile); } var root = xmlFile.getRootElement(); return xPathStep(path, root); }
改完之后,你原来的公式就能正常跑起来了。
额外要注意的点
- 一定要确认你的Drive XML文件是全网公开可访问的,不然脚本里的
UrlFetchApp.fetch会因为权限不够读不到文件哦。 - 检查下XML文件的格式有没有问题,如果XML本身有语法错误,
XmlService.parse也会报错,得先把XML修对才行。
内容的提问来源于stack exchange,提问作者Ike
相关产品推荐
相关产品推荐

