google script xml получить родителя?

У меня есть следующий код для загрузки файла XBRL в электронную таблицу Google.

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);

}

это приведет к удалению около 1700 строк на 5 столбцов в электронную таблицу Google.

Однако я хочу, чтобы все подэлементы в объекте "xbrl" добавлялись рядом с каждым из элементов.

Например: в настоящее время строка 1421 содержит следующие данные:

D2013Q2QTD Fact-456FCC569047499F03F61D8FBE559EC1 shares -3 133973000

Я хочу, чтобы это выглядело так: us-gaap WeightedAverageNumberOfDilutedSharesOutstanding D2013Q2QTD Fact-456FCC569047499F03F61D8FBE559EC1 shares -3 133973000

добавление пространства имен us-gaap и WeightedAverageNumberOfDilutedSharesOutstanding в первые 2 столбца

было бы неплохо, если бы для каждого элемента я мог использовать какую-то функцию getParent(), а затем просто вставить ее в первые 2 столбца во время цикла.

Я пытаюсь использовать getNamespace() для каждого элемента внутри цикла, но это дает мне ошибку

var ff=element.getNamespace()


person jason    schedule 04.08.2013    source источник


Ответы (1)


Я не очень хорошо понимаю, как вы определяете узлы, которые нужны, однако, после их определения, вы можете сделать следующее для первых 2-х нужных вам столбцов:

  ...
  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 невелик, не уверен, что вы можете использовать подстановочные знаки для поиска узлов, очень простой пример и, вероятно, неэффективный:

  ...
  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());
    }
  }
  ...
person wchiquito    schedule 04.08.2013
comment
Я хочу получить весь контент со всех узлов. Как ты это делаешь? спасибо за указание на новый и старый сервис xml. я этого не понимал. - person jason; 05.08.2013
comment
Можно ли использовать подстановочные знаки? как мне получить только элементы, связанные с пространством имен us-gaap? - person jason; 05.08.2013
comment
последний вопрос. Спасибо за вашу помощь. это будет полезно. это относится к атрибуту contextRef. В приведенном выше примере атрибутом для приведенного выше примера является что-то вроде D2012Q2. Я знаю, что это определено где-то в документе. Как мне посмотреть эту контекстную ссылку? - person jason; 09.08.2013
comment
sec.gov/Archives/edgar/data/1318605/ 000119312513096241/ ... попробуйте этот пример. вы можете видеть, что каждый contextref - это некий тип ссылки, я ищу возможность как-то найти это - person jason; 09.08.2013
comment
Я обновил код, чтобы получить значение атрибута. Я надеюсь, что вы найдете это полезным. - person wchiquito; 09.08.2013