谷歌脚本XML获取父母? [英] google script xml get parent?

查看:116
本文介绍了谷歌脚本XML获取父母?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下代码将XBRL文件下载到Google电子表格

I have the following code to download a XBRL file into Google spreadsheet

function XBRLexplore() {
var ss = SpreadsheetApp.openById("0Aiy1DTQRndx6dFZLVDJfRnptbmRFUTM2S2lnUlRfWWd");
var Sheet = ss.getSheetByName("Sheet1"); // Activate sheet
var target = "http://www.sec.gov/Archives/edgar/data/867773/000086777313000052/spwr-20130630.xml";
var pageTxt = UrlFetchApp.fetch(target).getContentText();
var xbrl = Xml.parse(pageTxt,true).getElement()
var test=xbrl.getElements();

var output=[];
for (var i=0;i<test.length;i++){
    var element=test[i]
    var f=[element.contextref,element.id,element.unitref,element.decimals,e=element.Text]
    output[i]=f;
}

Sheet.getRange(1,1,test.length,5).setValues(output);

}

这将在Google电子表格中逐行删除5列,大约1700行.

this will drop about 1700 row by 5 columns into Google spreadsheet.

但是,我希望对象"xbrl"中的所有子元素都添加到每个元素旁边.

However, I want all the of sub elements in object "xbrl" added next to each of the elements.

例如:当前,第1421行是以下数据:

For example: currently, row 1421 is the following data:

D2013Q2QTD Fact-456FCC569047499F03F61D8FBE559EC1 shares -3 133973000

我希望它看起来像这样: us-gaap WeightedAverageNumberOfDilutedSharesOutstanding D2013Q2QTD Fact-456FCC569047499F03F61D8FBE559EC1 shares -3 133973000

I want it to look like this: us-gaap WeightedAverageNumberOfDilutedSharesOutstanding D2013Q2QTD Fact-456FCC569047499F03F61D8FBE559EC1 shares -3 133973000

在前两列中添加名称空间us-gaapWeightedAverageNumberOfDilutedSharesOutstanding

adding the namespace us-gaap and WeightedAverageNumberOfDilutedSharesOutstanding in the first 2 columns

如果对每个元素我都可以使用某种getParent()函数,然后在循环过程中将其粘贴在前两列中,那将是很好的选择.

it would be nice if for each element i can use some sort of getParent() function then just stick it in the first 2 columns during the loop.

我正在尝试对循环中的每个元素使用getNamespace(),但这给了我一个错误

I'm trying to use the getNamespace() for each element inside the loop, but it's giving me an error

var ff=element.getNamespace()

推荐答案

我不太了解如何确定需要的节点,但是,在确定它们之后,可以对所需的前两列执行以下操作:

I do not understand very well how you determine the nodes that need, however, after determining them, you can do the following for the first 2 columns you need:

  ...
  var target = "http://www.sec.gov/Archives/edgar/data/867773/000086777313000052/spwr-20130630.xml";
  var pageTxt = UrlFetchApp.fetch(target).getContentText();
  var xbrl = XmlService.parse(pageTxt);
  var element = xbrl.getRootElement().getChildren()[1420];
  Logger.log(element.getNamespace().getPrefix()); // us-gaap
  Logger.log(element.getName()); // WeightedAverageNumberOfDilutedSharesOutstanding
  ...

使用 XmlService 访问新服务旧服务,简称为 Xml .

更新

我对 XmlService 的经验很少,不太确定您可以使用通配符搜索节点,这是一个非常基本的示例,可能效率很低:

My experience with XmlService is little, not too sure if you can use wildcards for the search of nodes, a very basic example and probably inefficient can be:

  ...
  var ns = 'us-gaap';
  var target = "http://www.sec.gov/Archives/edgar/data/867773/000086777313000052/spwr-20130630.xml";
  var pageTxt = UrlFetchApp.fetch(target).getContentText();
  var xbrl = XmlService.parse(pageTxt);
  var elements = xbrl.getRootElement().getChildren();
  var el, attr;
  for (var element = 0, len = elements.length; element < len; ++element) {
    el = elements[element];
    if (el.getNamespace().getPrefix() === ns) {
      /* YOUR CODE */
      Logger.log(ns);
      Logger.log(el.getName());
      attr = el.getAttribute('contextRef');
      if(attr) Logger.log(attr.getValue());
    }
  }
  ...

这篇关于谷歌脚本XML获取父母?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆