Google Apps Script解析XML时xsi前缀未绑定异常该如何解决?
错误原因
这个报错是XML语法校验不通过导致的:你要解析的XML文件中使用了xsi:schemaLocation属性,但整个XML文档没有预先声明xsi前缀对应的命名空间URI,不符合W3C的XML命名空间规范,所以XmlService的解析器直接抛出异常。
你之前对比的可正常解析的XML,大概率已经在根节点声明了xsi对应的命名空间,所以不会触发这个错误。你贴的示例XML存在标签嵌套顺序错误的问题,不过这不是本次报错的原因,如果实际XML存在该问题会直接报标签不匹配的错误。
解决方案
有两种可落地的处理方式:
- 方案1:修改XML源文件(最规范)
在XML的根节点上补充xsi前缀的命名空间声明,xsi对应的标准命名空间URI为http://www.w3.org/2001/XMLSchema-instance,示例修改如下:
原根节点写法:
<Document xsi:schemaLocation="你的schema地址">
修改后:
<Document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="你的schema地址">
- 方案2:代码中预处理XML字符串(无法修改源文件时使用)
如果没办法直接修改源XML文件,可以在解析前对读取到的XML字符串做替换处理,手动补上缺失的命名空间声明,修改后的代码如下:
function combinePaths() { //1. 获取xml文件 var earthFile = DriveApp.getFileById("1Pa994sHM-B8gAFxmrQk0Q3CWeQm1-I61"); //2. 读取xml字符串 var earthFileName = earthFile.getName(); var earthBlob = earthFile.getAs("text/xml"); var earthString = earthBlob.getDataAsString(); // 预处理:给Document节点补上xsi命名空间声明 earthString = earthString.replace(/<Document/, '<Document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"'); //3. 解析XML var earthContent = XmlService.parse(earthString); }
内容的提问来源于stack exchange,提问作者Jaden Ranzenberger
相关产品推荐
相关产品推荐

