#xml #api #google-apps-script
#xml #API #google-apps-script
Вопрос:
Я немного застрял в работе с многоуровневым XML с помощью Google App Script.
Я выполняю выборку API XML с помощью команды UrlFetchApp.fetch(). Это работает. Формат 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>
Вот основная часть моего кода. В настоящее время я могу получить информацию из категории, как вы можете видеть в моем фрагменте моего кода ниже. Моя проблема заключается в том, что каждая попытка, которую я предпринимал, захватить подкатегорию, если она существует, я не могу присвоить данные переменной.
// 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();
}
Любая помощь очень ценится, поскольку я провел весь день в тупике.
Ответ №1:
Вы должны получить следующего дочернего элемента с помощью 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();
}
}
}