Сегодня я столкнулся с ситуацией на работе, когда мне нужно было взять строку 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 принимает форму набора тестов .