Google Apps 脚本:解析 XML 会导致错误:“无法在对象中找到函数 getChildren”
Google Apps Script: Parsing XML results in error: "Cannot find function getChildren in object"
我正在尝试使用Google Apps脚本在Google电子表格中解析以下XML文档。特别是我想解析lineItems
的值及其属性的值coaCode
,例如 RTLR = 50211.000000:
<ReportFinancialStatements Major="1" Minor="0" Revision="1">
<FinancialStatements>
<COAMap></COAMap>
<AnnualPeriods>
<FiscalPeriod Type="Annual" EndDate="2009-06-30" FiscalYear="2009">
<Statement Type="INC">
<FPHeader>
<PeriodLength>12</PeriodLength>
<Source Date="2009-09-23">ARS</Source>
</FPHeader>
<lineItem coaCode="SREV">50211.000000</lineItem>
<lineItem coaCode="RTLR">50211.000000</lineItem>
<lineItem coaCode="SCOR">12001.000000</lineItem>
</Statement>
</FiscalPeriod>
这是我的代码片段:
function parse(txt) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];
var document = XmlService.parse(txt);
var root = document.getRootElement();
var elements = root.getChild('FinancialStatements').
getChild('AnnualPeriods').getChildren('FiscalPeriod');
var columnOffset = 2;
var rowOffset = 5;
for (var i = 0; i < elements.length; i++) {
var column = elements.length - i + columnOffset;
var endDate = elements[i].getAttribute('EndDate').getValue();
var fiscalYear = elements[i].getAttribute('FiscalYear').getValue();
var fiscalPeriodType = elements[i].getAttribute('Type').getValue();
// ***** SCRIPT CRASHES HERE: *****
var values = elements[i].getChildren('Statement').getChildren('lineItem');
for (var j = 0; j < values.length; j++) {
var row = j + rowOffset;
var value = values[j].getValue();
sheet.getRange(row,column).setValue(value);
}
}
}
当我运行代码时,它在行崩溃
var values = elements[i].getChildren('Statement').getChildren('lineItem');
带有错误消息:
TypeError: Cannot find function getChildren in object [Element: <Statement/>],
[Element: <Statement/>],[Element: <Statement/>].
我试图找到错误几个小时,但没有成功(我尝试了.getChildren
组合的不同变体)。
你知道我的代码可能有什么问题吗?
对于这样的 XML:
<ReportFinancialStatements Major="1" Minor="0" Revision="1">
<FinancialStatements>
<COAMap />
<AnnualPeriods>
<FiscalPeriod Type="Annual" EndDate="2009-06-30" FiscalYear="2009">
<Statement Type="INC">
<FPHeader>
<PeriodLength>12</PeriodLength>
<Source Date="2009-09-23">ARS</Source>
</FPHeader>
<lineItem coaCode="SREV">50211.000000</lineItem>
<lineItem coaCode="RTLR">50211.000000</lineItem>
<lineItem coaCode="SCOR">12001.000000</lineItem>
</Statement>
</FiscalPeriod>
</AnnualPeriods>
</FinancialStatements>
</ReportFinancialStatements>
改变:
...
//var values = elements[i].getChildren('Statement').getChildren('lineItem');
var values = elements[i].getChildren('Statement')[0].getChildren('lineItem');
...
或者,您可以进行以下更改:
//var values = elements[i].getChildren('Statement').getChildren('lineItem');
var values = elements[i].getChild('Statement').getChild('lineItem');
当数据存在于第一个"语句"节点中时,这和@wchiquito提到的代码更改将起作用。
相关文章:
- 引用对象中的通用值
- jQuery匹配JSON对象的部分文本
- 节点导出返回一个空对象
- 如何在Javascript中将JSon对象转换为数组
- 我可以在json对象中添加一个函数吗
- 使用JS将数组转换为json对象
- 全局变量和全局对象的属性之间有什么区别吗
- 比较从函数和生成的日期对象
- Javascript,访问一个主要对象模块模式中的每个对象
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- 调整窗口大小时,可拖动的对象会出现在容器外部
- 如何使用javascript从主svg对象动态创建svg视图框
- 如何使用json将对象列表从java转换为javascript
- 序列化数据属性中对象的最可靠方法
- 如何访问声音管理器2创建的声音对象
- FabricJs-限制主对象内添加对象的移动区域
- Javascript(Angular)从一个对象数组到第二个数组查找值
- 值对象在某个变量发生更改后发生更改
- 如何为json对象中的段发送array[]
- Google Apps 脚本:解析 XML 会导致错误:“无法在对象中找到函数 getChildren”