我使用以下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
答案 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
变量的所有数据,就会有一个无法测试的未知数据。