Я использую приведенный ниже код для получения длины подкаста (т.е. элемента <itunes:duration>
) из RSS-канала.Это прекрасно работает на большинстве RSS-каналов (например, этот ), но не работает на пару каналов (например, этот ).
var xml_text = UrlFetchApp.fetch(input).getContentText();
var document = XmlService.parse(xml_text);
var title = document.getRootElement().getChild("channel").getChild("title").getText();
if (xml_text.indexOf("itunes:duration") >= 0) {
var items = document.getRootElement().getChild("channel").getChildren("item");
var itunes = XmlService.getNamespace('http://www.itunes.com/dtds/podcast-1.0.dtd');
for (var ind = 0; ind < items.length; ind++) {
var item_text = items[ind].getText(); // <--- PROBLEM!!!
if (item_text.indexOf("itunes:duration") >= 0) {
length[ind] = hmsToSecondsOnly(items[ind].getChild("duration", itunes).getText());
totLength = totLength + length[ind];
if (length[ind] != 0) {
lengthCount = lengthCount + 1;
};
};
};
};
Когдаэто не работает, строка, помеченная <--- PROBLEM
, заставляет item_text
быть пустой.
Для ясности, я знаю, что элемент существует, потому что когда я использую try-catch
вместо этого (см. ниже)требуемые данные добавляются в массив, когда они существуют, а когда их нет, ошибка, возникающая при попытке получить несуществующий элемент XML, игнорируется (как и предполагалось).
var xml_text = UrlFetchApp.fetch(input).getContentText();
var document = XmlService.parse(xml_text);
var title = document.getRootElement().getChild("channel").getChild("title").getText();
if (xml_text.indexOf("itunes:duration") >= 0) {
var items = document.getRootElement().getChild("channel").getChildren("item");
var itunes = XmlService.getNamespace('http://www.itunes.com/dtds/podcast-1.0.dtd');
for (var ind = 0; ind < items.length; ind++) {
try {
length[ind] = hmsToSecondsOnly(items[ind].getChild("duration", itunes).getText());
totLength = totLength + length[ind];
if (length[ind] != 0) {
lengthCount = lengthCount + 1;
};
} catch (ignore) {
};
};
};
Все это говорит о том, что обе эти попытки представляют собой обходные пути, которые имеют гораздо лучшее решение.Поэтому у меня есть два следующих вопроса:
- Существует ли какая-то функция, которая проверяет, существует ли элемент в XML?
- Почему
.getText()
иногда возвращает пустойстрока, когда элемент не пустой?