我有点拘泥于使用Google App Script处理多级XML。
我正在使用UrlFetchApp.fetch((命令执行API XML获取。它起作用了。XML格式如下所示:
<CALENDAR>
<CalendarManager>
<Categories>
<Category Id="1" AuthorId="1234">
<Author Legacy="True"></Author>
<Name></Name>
<LastUpdated></LastUpdated>
</Category>
<Category Id="2" AuthorId="1234">
<Author Legacy="True"></Author>
<Name></Name>
<LastUpdated></LastUpdated>
<Subcategories>
<Subcategory Id="1" AuthorId="1324">
<Author Legacy="True"></Author>
<Name></Name>
<LastUpdated></LastUpdated>
</Subcategory>
<Subcategory Id="2" AuthorId="1234">
<Author Legacy="True"></Author>
<Name></Name>
<LastUpdated></LastUpdated>
</Subcategory>
</Category>
</Categories>
</CalendarManager>
</CALENDAR>
这是我代码的主要部分。目前,我可以从Category中获取信息,您可以在下面的代码片段中看到我的信息。我的问题是,我每次尝试获取子类别时,如果存在子类别,我无法将数据分配给变量。
// Get Category Information
var rAndCTypes = root.getChild('CalendarManager').getChild('Categories').getChildren('Category');
for (var r = 0; r < rAndCTypes.length; r++) {
var rAndC = rAndCTypes[r];
var typeIdID = rAndC.getAttribute('Id').getValue().replace(/['=Id]/g, "");
var AuthorId = rAndC.getAttribute('AuthorId').getValue().replace(/['=AuthorId]/g, "");
var authorLegacy = rAndC.getContent(0).getValue();
var name = rAndC.getContent(1).getValue();
var lastUpdated = rAndC.getContent(2).getValue();
}
我们非常感谢您的帮助,因为我已经被困了一整天。
您应该使用getContent(3(来获得下一个子项
为了避免子类为null,请在前面为子类别使用条件。这里有一个例子:
var rAndCTypes = root.getChild('CalendarManager').getChild('Categories').getChildren('Category');
for (var r = 0; r < rAndCTypes.length; r++) {
var rAndC = rAndCTypes[r];
var typeIdID = rAndC.getAttribute('Id').getValue().replace(/['=Id]/g, "");
var AuthorId = rAndC.getAttribute('AuthorId').getValue().replace(/['=AuthorId]/g, "");
var authorLegacy = rAndC.getContent(0).getValue();
var name = rAndC.getContent(1).getValue();
var lastUpdated = rAndC.getContent(2).getValue();
var subcategories = rAndC.getContent(3);
if(subcategories) {
subcategoriesChildren = subcategories.getChildren('Subcategory');
for (var i = 0; i < subcategoriesChildren.length; i++) {
var sub = subcategoriesChildren[i];
var subTypeIdID = sub.getAttribute('Id').getValue().replace(/['=Id]/g, "");
var subAuthorId = sub.getAttribute('AuthorId').getValue().replace(/['=AuthorId]/g, "");
var subAuthorLegacy = sub.getContent(0).getValue();
var subName = sub.getContent(1).getValue();
var subLastUpdated = sub.getContent(2).getValue();
}
}
}
参考
- XML服务