Google Sheets脚本解析RSS报错:实体"Wheel-TW"未以分号结尾
问题分析
报错提示Exception: Error on line 134: The reference to entity "Wheel-TW" must end with the ';' delimiter.,核心原因是你抓取的RSS feed(https://agremia.com/feed)生成的XML内容不符合规范——里面存在未正确转义的&符号(比如出现&Wheel-TW这类格式)。而Google Apps Script的XmlService.parse对XML格式校验严格,要求所有&必须转义为&(除非是&、<这类合法实体),因此触发解析失败。
解决方案
在解析XML之前,先对获取到的文本做预处理,把所有未转义的&替换成合法的&,修改后的完整脚本如下:
function getURLData() { var currentData = []; var urltoCheck = [ "https://agremia.com/feed", ]; for (var i = 0; i < urltoCheck.length; i++){ var ficiencaData = UrlFetchApp.fetch(urltoCheck[i]); var xml = ficiencaData.getContentText(); // 新增:处理未转义的&符号,规避XML解析报错 xml = xml.replace(/&(?!amp;|lt;|gt;|quot;|apos;)/g, '&'); let response = XmlService.parse(xml); var root = response.getRootElement(); let channel = root.getChild('channel'); let items = channel.getChildren('item'); items.forEach(item => { let title = item.getChild('title').getText(); let pubDateb = item.getChild('pubDate').getText(); let link = item.getChild('link').getText(); currentData.push([title,pubDateb,link,urltoCheck[i]]); }); } var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getSheetByName("Combinado Medios"); var currentDataRange = sheet.getRange(sheet.getLastRow() + 1, 1, currentData.length, currentData[0].length); currentDataRange.setValues(currentData); }
补充说明
- 正则表达式
&(?!amp;|lt;|gt;|quot;|apos;)会精准匹配所有不是合法XML实体开头的&符号,确保只替换未转义的部分,不会破坏已经正确转义的内容。 - 这个问题并非你的脚本逻辑错误,是目标网站的RSS生成不规范导致的,通过文本预处理即可解决解析报错问题。
内容的提问来源于stack exchange,提问作者djur
相关产品推荐
相关产品推荐

