为什么我的谷歌应用程序脚本出现系统标识错误

时间:2015-02-18 01:58:05

标签: javascript xml parsing google-apps-script

我使用以下Google Apps脚本进行屏幕抓取。

function getLinks(html) {
  var doc = XmlService.parse(html);
  var html = doc.getRootElement();
  var table = getElementsByClassName(html, "headLinks")[0];
  var output = '';
  var linksInMenu = getElementsByTagName(table, 'a');
  for(i in linksInMenu) output+= XmlService.getRawFormat().format(linksInMenu[i])+'<br>';
  return HtmlService.createHtmlOutput(output);
}

第一行代码: var doc = XmlService.parse(html);抛出以下错误:

Error on line 2: The system identifier must begin with either a single or double quote character

我相信错误消息告诉我html系统ID周围没有单引号或双引号。 html的第2行如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

我不确定系统标识符的含义。有没有人遇到这个问题,你能够提出一个解决方法或解决方案。

Google Apps脚本代码来自Romain Vialard:website

1 个答案:

答案 0 :(得分:1)

parse方法的参数为xml。第一行XML通常以XML声明开头,包含版本和编码信息。 HTML和XML都可以具有以<!DOCTYPE开头的系统标识符,即第二行。系统标识符的可接受语法是:

<!DOCTYPE root-element PUBLIC "FPI" ["URI"] [ 
<!-- internal subset declarations -->
]>

<!DOCTYPE root-element SYSTEM "URI" [ 
<!-- internal subset declarations -->
]>

我运行了一个带有硬编码数据的测试函数:

function testXML_Parse() {

  var theXML_Declaration = '<?xml version="1.0" encoding="UTF-8"?>';
  var theXML = "<note><to>Someone</to><from>Anyone</from><heading>Reminder</heading>" +
    "<body>Don't forget me this weekend!</body></note>";

  var theSysIdentifier = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">';
  var doc = XmlService.parse(theXML_Declaration + theSysIdentifier + theXML);

  Logger.log('doc: ' + doc);
}

我使用了你给出的完全相同的第二行,并且没有任何错误。

如果没有传递到html变量的所有数据,就会有一个无法测试的未知数据。