javascript - 谷歌应用脚​​本: Parsing XML results in error: "Cannot find function getChildren in object"

标签 javascript xml google-apps-script google-sheets

我正在尝试使用 Google 电子表格中的 Google Apps 脚本解析以下 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 value = 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');
...

关于javascript - 谷歌应用脚​​本: Parsing XML results in error: "Cannot find function getChildren in object",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19865686/

相关文章:

javascript - 我能知道通用 getter/setter 在其主体中应用什么属性吗?

java - C# 序列化器/反序列化器与 java 中的 XStream 具有相同的功能

sql - SQL 中的多个 XML 标记

javascript - 使用 jquery 创建选中的复选框数组

google-apps-script - 如何在本地安装的 IDE 中启用 Google Apps 脚本的自动完成功能

javascript - 在 AngularJS 指令中调用 Controller 函数

javascript - 如何将javascript中的文本拆分为段落?

javascript - 使用 jQuery 在一组图像上定位文本

android - 聚焦时设置编辑文本边框

javascript - 访问 Google 文档中的 Google Apps Scripts 脚本