Описание класса FeedsFile находится в файле feedsfileparser. js и близко напоминает своего серверного «коллегу». Его задача - п зовать содержимое файла feeds. xml в объекты JavaScript.
Класс FeedsFileElement является представлением одного элеме файла feeds.xml. Поскольку в этом документе задействованы два типа элементов, то и сам класс получился довольно прос-принимает всего один аргумент - узел элемента.
function FeedsFileElement(oNode) {
if (oNode.tagName.toLowerCaseO == "section") { this.links = [];
var linkNodes = flNode.getElementsByTagNameC'link"); for (var i = 0; i < linkNodes.length; i++) {
this.links[i] = new FeedsFileElement(linkNodes[i]);
}
}
Если oNode представляет собой элемент , то необход дать массив элементов . Массив links заполняется объе созданными в результате передачи каждого элемента руктору FeedsFileElement. Если oNode - это элемент , то в во fileName записывается значение атрибута filename, извлекав узла с помощью метода getAttribute():
else {
this.fileName = oNode.getAttribute("filename");
}
this, name = oNode.getAttributeC'name");
Элементы и оба обладают атрибутом name, поэтому по¬сле выполнения действий, различных для разных элементов, произво¬дится запись значения атрибута name в одноименное свойство объекта.
Загрузка файла с рассылкой выполняется с помощью библиотеки aXml, о которой мы рассказывали в главе 4. По разным причинам вме¬сто объекта XMLHttp используется XML DOM. Одна из них состоит
том, что feeds, xml - это статический файл, и использование XMLHttp в ЕЕ потребовало бы дополнительного программного кода, чтобы за¬жать заголовок, запрещающий кэширование, без которого IE продол-жал бы брать локальную копию файла feeds, xml из кэша даже после того, как в него будут внесены изменения.
function FeedsFileO { var oThis = this; this.sections = []; this.onload = null;
var oXmlDom = zXmlDom.createDocumentO; oXmlDom.load("feeds.xml");
Файл со списком рассылок загружается с помощью XML DOM, но нам шо-прежнему приходится использовать асинхронный режим (поведе¬ние по умолчанию) работы объекта XML DOM. Если файл загружать
синхронном режиме, приложение будет ждать, пока документ не бу¬дет полностью загружен, что с точки зрения пользователя может вы-оядеть как зависание приложения. Для мониторинга изменения со¬стояния загрузки используется событие onreadystatechange:
oXralOom.onreadystatechange = function () < if (oXmlDom.readyState == 4) { var oSections =
oXmlDom.documentElement.getElementsByTagName("section");
for (var i = 0; i < oSections.length; i++) {
oThis.sections[i] = new FeedsFileElement(oSections[i]);
}
>
oXmlDom = null;
if (typeof oThis.onload == oThis.onloadO;
>
'function") {
С помощью метода DOM getElementsByTagName() извлекается элемент ^section />, и массив раздела заполняется объектами FeedsFileElement. Но завершении всех операций со структурой DOM документ выгружа¬ется из памяти путем присваивания значения null объекту oXmlDom, след за этим возбуждается событие onload.
В классе FeedsFile есть метод с именем getLinkByFileName() (вы должны шнить версию этого метода на языке С#). Он выполняет поиск по
массиву объектов links для каждого из разделов и возвращает объев заданным значением имени файла. Напомним еще раз: имена фа уникальны (они должны быть уникальными) и поэтому однознач идентифицируют элементы .
this.getLinkByFileName = function (sFileName) {
for (var i = 0; i < this.sections.length; i++) { var section = this.sections[i]; for (var j = 0; j < section.links.length; j++) { var link = section.links[j];
if (sFileName.toLowerCaseO == link. fileName.toLowerCaseO) { return link;
}
}
}
alert("He удалось найти сведения о заданной рассылке."); return this.sections[0].link[0];
};
Если совпадения не найдены, то с помощью метода alert() вывод сообщение об ошибке и в качестве результата возвращается пер элемент в рассылке.