Статьи

Обработка XML с помощью JavaScript

Сегодня я столкнулся с ситуацией на работе, когда мне нужно было взять строку XML из текстовой области и выполнить с ней операции DOM с помощью JavaScript. Немного покопавшись, я вспомнил библиотеку с открытым исходным кодом Sarissa, которую я проверил несколько дней назад. Sarissa — удивительно полезный фрагмент кода: он предлагает унифицированный интерфейс в Internet Explorer и Mozilla для обработки HTTP-запросов, обработки документов и фрагментов XML и выполнения преобразований XSLT. Функции IE в основном предоставляются с использованием объектов ActiveX, а функции Mozilla используют преимущества пакета XML Extras от Mozilla.

Используя Sarissa, преобразование строки, содержащей XML, в обычный узел DOM можно выполнить с помощью следующего:

var dom = Sarissa.getDomDocument(); var xml = ' This is XML! '; dom.loadXML(xml); var dom = Sarissa.getDomDocument(); var xml = ' This is XML! '; dom.loadXML(xml); var dom = Sarissa.getDomDocument(); var xml = ' This is XML! '; dom.loadXML(xml);

Затем ‘dom’ можно рассматривать как узел DOM и манипулировать с помощью обычных функций API DOM (appendChild, childNodes и т. д.). Чтобы преобразовать узел обратно в XML, просто перейдите к его свойству «xml»:

var xml_again = dom.xml;

У Сариссы есть один недостаток: сама библиотека занимает 24 КБ. Поскольку приложение, над которым я работаю, должно работать только с Mozilla, я решил покопаться в исходном коде Sarissa, чтобы увидеть, как можно достичь вышеперечисленного без уровня совместимости. Вот эквивалентный специфичный для Mozilla код, выполняющий прямые вызовы дополнительных классов, предоставляемых XML-дополнениями Mozilla:

var xml = ' This is XML! '; var dom = (new DOMParser()).parseFromString(xml, "text/xml"); var xml = ' This is XML! '; var dom = (new DOMParser()).parseFromString(xml, "text/xml"); var xml = ' This is XML! '; var dom = (new DOMParser()).parseFromString(xml, "text/xml");

И преобразовать обратно в строку:

var xml_again = (new XMLSerializer()).serializeToString(dom);

К сожалению, насколько я могу судить, единственная официальная документация для пакета XML extras принимает форму набора тестов .