【问题标题】:google apps script Xmlservice谷歌应用脚​​本 Xmlservice
【发布时间】:2021-03-26 23:53:39
【问题描述】:

我正在更新一些曾经使用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。谢谢。

【问题讨论】:

    标签: xml google-apps-script


    【解决方案1】:

    我相信你的目标如下。

    • 您希望从 XML 数据的 entry 检索值,并希望使用 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']")
      

    参考资料:

    【讨论】:

    • 您的代码似乎没有抓住link ...每一个都是空白的。如何将href 放入链接列?
    • @jason 感谢您的回复。我带来的不便表示歉意。在这种情况下,关于我的示例脚本,请将var ar = entries.map(e => header.map(f => e.getChild(f, ns).getValue().trim()));修改为var ar = entries.map(e => header.map(f => f == "link" ? e.getChild(f, ns).getAttribute("href").getValue() : e.getChild(f, ns).getValue().trim()));,然后重新测试。
    • 现在工作。太奇怪了。我认为它以前工作过。 SEC一定改了吗?感谢更新。
    • @jason 感谢您的回复和测试。很高兴您的问题得到解决。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-04
    • 2016-10-08
    • 2015-12-06
    • 2018-05-28
    相关资源
    最近更新 更多