谷歌应用程序脚本 Xmlservice

时间:2021-03-26 23:53:39

标签: xml google-apps-script

我正在更新一些用于使用 Xml.parse 解析此页面的代码 https://www.sec.gov/cgi-bin/browse-edgar?company=&CIK=&type=8-k&owner=exclude&count=100&action=getcurrent

旧代码使用 Xml 来获取像...这样的表

var pageTxt = UrlFetchApp.fetch(target).getContentText();
var pageDoc = Xml.parse(pageTxt,true);
var table = pageDoc.getElement().body.div.table

Xml 已弃用。

function myFunction() {
  var rss = "https://www.sec.gov/cgi-bin/browse-edgar?action=getcurrent&CIK=&type=8-k&company=&dateb=&owner=include&start=0&count=40&output=atom"
  var r = UrlFetchApp.fetch(rss).getContentText()
  var doc = XmlService.parse(r)
  var atom = XmlService.getNamespace(rss)
  var table = doc.getRootElement().getChildren('summary', atom)

}

现在我正在尝试使用 XmlService 并且在获取同一张表时遇到问题

有人可以帮助获取表格的代码吗?我需要一个数组来循环遍历每个 trtd。谢谢。

1 个答案:

答案 0 :(得分:2)

我相信你的目标如下。

  • 您想从 entry 的 XML 数据中检索值,并想使用 Google Apps 脚本将这些值放入电子表格中。

修改点:

  • 当我看到来自 https://www.sec.gov/cgi-bin/browse-edgar?action=getcurrent&CIK=&type=8-k&company=&dateb=&owner=include&start=0&count=40&output=atom 的 URL 的数据时,我确认该数据是 XML 数据。
  • 当我看到您的脚本时,似乎没有检索到 entry

修改后的脚本:

function myFunction() {
  // Retrieve the XML data from URL.
  var rss = "https://www.sec.gov/cgi-bin/browse-edgar?action=getcurrent&CIK=&type=8-k&company=&dateb=&owner=include&start=0&count=40&output=atom"
  var r = UrlFetchApp.fetch(rss).getContentText()

  // Parse the XML data.
  var doc = XmlService.parse(r)
  var root = doc.getRootElement();
  var ns = root.getNamespace();
  var entries = root.getChildren("entry", ns);
  var header = ["title", "link", "summary", "updated", "id"];
  var ar = entries.map(e => header.map(f => e.getChild(f, ns).getValue().trim()));
  ar.unshift(header);
  
  // Put the value to the active sheet.
  var sheet = SpreadsheetApp.getActiveSheet();
  sheet.getRange(1, 1, ar.length, ar[0].length).setValues(ar);
}
  • 当您只想检索summary时,请将var header = ["title", "link", "summary", "updated", "id"];修改为var header = ["summary"];

注意:

  • 我以为在你的情况下,还可以使用内置的IMPORTXML公式,那么下面的公式呢?

      =IMPORTXML("https://www.sec.gov/cgi-bin/browse-edgar?action=getcurrent&CIK=&type=8-k&company=&dateb=&owner=include&start=0&count=40&output=atom","//*[local-name()='entry']")
    
  • 或者,当您想要检索 summary 的值时,您也可以使用以下公式。

      =IMPORTXML("https://www.sec.gov/cgi-bin/browse-edgar?action=getcurrent&CIK=&type=8-k&company=&dateb=&owner=include&start=0&count=40&output=atom","//*[local-name()='summary']")
    

参考: