自动XML数据收集显示在Google表格中

时间:2017-06-02 15:34:34

标签: javascript ajax xml google-apps-script google-apps

我一直在尝试制作一个能够在Google表格中显示最新河流水平的Google脚本。 我正在查看here

的XML文档

这是一份非常长的文件,但我试图抓住的只是观察到的河流水位。 目前我有一个谷歌表设置,河流水平将收集所有数据。我最初使用XMLhttprequest让它工作,但发现谷歌脚本不支持该功能。所以我一直试图使用UrlFetch service,但还没有好运。

我正在处理的代码如下:



function Rivers() {
  var url = 'https://water.weather.gov/ahps2/hydrograph_to_xml.php?gage=llrw4&output=xml';

  var xml = UrlFetchApp.fetch(url).getContentText();

  var document = XmlService.parse(xml);

  var txt = "";
  path = "//site/observed/datum/primary"
  var nodes = xml.evaluate(path, xml, null, XPathResult.ANY_TYPE, null);
  var result = nodes.iterateNext();


  while (result) {
    txt += result.childNodes[0].nodeValue;
    result = nodes.iterateNext();

  }
  var ss = SpreadsheetApp.getActiveSpreadsheet();

  var sheet = ss.getSheets()[0];

  var cell = sheet.getRange('B:C');
}




当我尝试运行它时,我收到错误"Cannot find function evaluate"我确定这与fetchurl有关,但似乎无法找到它的修复程序。 任何有关工作的帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

Google Apps脚本在Google服务器上运行。因此,您无权访问浏览器中可用的某些DOM / BOM功能或API。这包括用于导航xml文档的XPath。如果要使用Xpath,则必须编写自己的函数进行解析。以下是我找到https://coderwall.com/p/cq63og/extract-data-from-xpath-via-google-apps-script

的示例

XmlService有自己的遍历xml文档的方法,可以使用而不是XPath。这是获取根元素的所有子节点的方法。

 var url = 'https://water.weather.gov/ahps2/hydrograph_to_xml.php?gage=llrw4&output=xml';

  var xml = UrlFetchApp.fetch(url).getContentText();


  var document = XmlService.parse(xml);
  var root = document.getRootElement();
  var children = root.getChildren();

您收到错误是因为您正在调用字符串变量上的函数。

  var xml = UrlFetchApp.fetch(url).getContentText();
  var nodes = xml.evaluate(path, xml, null, XPathResult.ANY_TYPE, null);

UrlFetchApp.fetch()的返回类型是HttpResponse。调用HttpResponse的getContentText()方法返回一个字符串。更多相关内容https://developers.google.com/apps-script/reference/url-fetch/http-response