MSXML: Реализация XML в Internet Explorer Сложность: средняя Сложность: средняя

Браузер Internet Explorer, начиная c версии 5.0 поддерживает XML и XSLT. Задача: разобрать реализацию XML в IE и научиться с ней работать.

Реализация XML появилась в IE начиная с пятой версии в виде ActiveX-компоненты на базе библиотеки MSXML. Существует несколько версий этой библиотеки, каждая из которых полнее предыдущей. Для того, что определить какую реализацию MSXML поддерживает ваша версия IE и создать объект для работы с XML, воспользуемся следующей функцией:
• Код JavaScript
// В основу данной функции легла функция createDocument
// авторов: Nicholas C.Zakas, Jeremy McPeak, Joe Fawcett,
// подвергнутая небольшим изменениям и закомментированная
function createXMLObject() {
      // Массив версий MSXML
      var versions = [
            "Msxml2.DOMDocument.6.0",
            "Msxml2.DOMDocument.5.0",
            "Msxml2.DOMDocument.4.0",
            "Msxml2.DOMDocument.3.0",
            "Msxml.DOMDocument",
      ];
      // Пройдем в цикле по всем версиям, начиная с последней
      for (var i = 0; i < versions.length; i++) {
            try {
                  // Первую успешно созданную версию сразу вернем
                  var ieXML = new ActiveXObject(versions[i]);
                  return ieXML;
            } catch(e) {}
      }
      // Если ни одна из версий не подошла
      // Значит ваш браузер не поддерживает MSXML
      alert("MSXML not supported");
      return false;
}
var ieXMLObject = createXMLObject();

Если функция успешно отработала, то на выходе мы получим пустой XML-объект, поддерживающий методы load() и loadXML().
Метод load() принимает в качестве аргумента URL xml-файла, который загружается в пустой объект, а метод loadXML() принимает в качестве аргументв строку с XML-данными:
• Код JavaScript
// Загрузка из файла
var ieXMLObject = createXMLObject();
ieXMLObject.load("example.xml");
// Подхватываем XML-данные из строки
ieXMLObject = createXMLObject();
var xmlString = '<books><book id="1"><author>Petrov.I.S.</author></book></books>';
ieXMLObject.loadXML(xmlString);

Как и в случае XMLHttpRequest, созданный xml-объект поддерживает обработку события onreadystatechange и изменяет свойство readyState.
По умолчанию, для метода load() поддерживается асинхронный режим, но его можно сменить с помощью свойства async:
• Код JavaScript
// Асинхронная загрузка - по умолчанию
ieXMLObject = createXMLObject();
ieXMLObject.load("example.xml");
// Синхронный режим загрузки
ieXMLObject = createXMLObject();
ieXMLObject.async = false;
ieXMLObject.load("example.xml");

После того, как XML-документ загружен, ссылку на корневой узел можно получить с помощью свойства documentElement, и от него уже ходить по DOM-дереву привычными свойствами: nodeName, nodeType, firstChild, parentNode, nextSibling и др.
• Код JavaScript
ieXMLObject = createXMLObject();
var xmlString = '<books><book id="1"><author>Petrov.I.S.</author></book></books>';
ieXMLObject.loadXML(xmlString);
alert(ieXMLObject.documentElement.nodeName); // Выведет "books"
alert(ieXMLObject.documentElement.firstChild.nodeName); // Выведет "book"

Кроме стандартизированных привычных DOM-свойств Internet Explorer реализовал несколько своих собственных:
xml — возвращает xml-код указанного узла (аналог innerHTML).
text — возвращает текстовое содержимое текущего узла и всех его потомков (аналог innerText).

Кроме привычных свойств работы с DOM можно использовать и привычные методы: createElement, removeChild, setAttribute и др.

Обработка ошибок

Предположим вы загрузили xml-объект и не можете с ним нормально работать. К примеру, свойство documentElement возвращает null. Это значит, что при загрузке произошла ошибка, причину которой можно выяснить с помощью дочернего объекта parseError, имеющий следущие свойства:

errorCode - возвращает целочисленный код ошибки. 0 - если ошибок нет и документ загружен и обработан.
filePos - позиция ошибки в файле
line - номер строки с ошибкой
linePos - позиция ошибки в строке
reason - описание причины ошибки
srcText - текст строки с ошибкой
url - url документа

Создадим xml-файл, с содержимым, намеренно содержащим ошибку (вместо закрывающего тега author запишем открывающий):
• Код без подсветки
<books>
      <book id="1">
            <author>Petrov.I.S.<author>
      </book>
</books>

Естественно такой документ не будет обработан, и чтобы посомтреть в чем причина ошибки запишем такой код:
• Код JavaScript
ieXMLObject = createXMLObject();

ieXMLObject.onreadystatechange = function() {
      if (ieXMLObject.parseError.errorCode != 0) {
            alert(
                  "errorCode = " + ieXMLObject.parseError.errorCode + "\n" +
                  "filePos = " + ieXMLObject.parseError.filePos + "\n" +
                  "line = " + ieXMLObject.parseError.line + "\n" +
                  "linePos = " + ieXMLObject.parseError.linePos + "\n" +
                  "reason = " + ieXMLObject.parseError.reason + "\n" +
                  "srcText = " + ieXMLObject.parseError.srcText + "\n" +
                  "url = " + ieXMLObject.parseError.srcText
            );
      }
}

ieXMLObject.load("xml/example.xml");

Всплывающее окно с сообщением смотрим в здесь.

Не забудьте!
Такая реализация XML присуща только Internet Explorer!
О реализации в других браузерах статья будет размещена в ближайшее время.

Опубликовано: 14-3-2008
Автор: Александр Бурцев


Комментарии [ Написать комментарий ]

ullcqlbio: ZNwAmomQxvqdXhjy
DsFL0J <a href="http://dcsarbchawpe.com/">dcsarbchawpe</a>, [url=http://hkpwzsmuslux.com/]hkpwzsmuslux[/url], [link=http://iaejucnsvtfn.com/]iaejucnsvtfn[/link], http://dskhardexfkj.com/

Метки

AJAX Canvas & VML JS::Unsorted JS::Разработка JSправочник Дата и время Координаты, размеры, ресайз, скролл Обработка изображений Работа с DOM События (event) Строковые данные (String) Формы (<form>)

Полезные ссылки

DOM onReady на habr DomContentLoaded fixing Google Map API JavaScript 1.5 на Mozilla.org (eng) JavaScript и не только на suncloud (рус) Измерение размеров и полей элементов в ИЕ Нововведения в JavaScript 1.6 (eng) Правильный WYSIWYG (рус) Редактор jEdit Рисуем JavaScript-ом

Новый портал для web-программистов!

Рад вам сообщить, что открылся новый информационный проект о web-технологиях - webew.ru. Здесь вы найдете актуальные статьи по XML, HTML, PHP, MySQL, Javascript, SEO и др. Заходите, регистрируйтесь и оставляйте свои посты и комментарии!

Комментарии!

У вас появилась возможность добавлять комментарии. В конце каждой статьи найдется ссылка "Написать комментарий", открывающая форму. Новая возможность не требует авторизации. Просьба не злоупотреблять тем, что двери открыты ;)

Пишите...

Если вы увидели на fastcoder.org ошибку или неточность, захотели написать и разместить здесь свою статью или просто решили поблагодарить авторов за понравившийся скрипт - заходите сюда и отправляйте сообщения.