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()
1 ответ
Я не очень хорошо понимаю, как вы определяете узлы, которые вам нужны, однако после их определения вы можете сделать следующее для первых двух столбцов, которые вам нужны:
...
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());
}
}
...