XML parsing in JavaScript

20 Ноябрь 2010

Это кстати тоже на одном из собеседований спросили, в Тридионе, если быть точнее. Они там не любят фреймворки и весь javascript пишут руками. Даже не представляю какие там спагетти.

В общем после недолгих расспросов что лучше лучше для общения с сервером XML или JSON (да вообще одинаково по-моему) был задан вопрос вопрос "как распарсить xml в javascript?". Я ляпнул первое что в голову пришло - есть специальный объект.


if(window.ActiveXObject) {
	var xml = new ActiveXObject("Microsoft.XMLDOM");
	xml.async=false;
	xml.loadXML(s);
	return xml;
} else if(window.DOMParser) {
	var parser = new DOMParser();
	return parser.parseFromString(s,'text/xml');
} else {
	throw "Загрузка XML не поддерживается браузером";
}

Но судя по всему от меня ожидали ответа что-то вроде "xml приходит в поле xhr.responseXML а json в xhr.responseText" и меня спросили, "а еще?!" Ну я не терялся и сказал что можно через обычное DOM дерево попробовать. Я, правда, ступил и сказал через document.createDocumentFragment на самом деле он тут не при чем. Парсить можно вот так:


var div = document.createElement("div")
div.innerHTML = "<qwerty>123</qwerty>";
div.querySelectorAll("*")

Кошерный это способ или нет, это не важно, но парсить можно. А мне ответ судя по реакции не защитали.

А я продолжал рассказывать, что если совсем скучно то можно парсить xml регулярками и сабстрингами. Вот тут Остапа понесло в рассказ о SAX парсере ;) Так что парсить XML в javascript можно как угодно.

  1. 20 Ноябрь 2010 в 19:55 | #1
    > что лучше лучше для общения с сервером XML или JSON (да вообще одинаково по-моему) ну здесь ты загнался, размер данных не соизмерим и лишние функции для парсинга иксемель, а пхп что джсон что иксмель по%ую
  2. Костег
    20 Ноябрь 2010 в 20:01 | #2
    ненавижу XML
  3. 20 Ноябрь 2010 в 20:11 | #3
    Размер контейнера это действительно самый страшный аргумент, допустим одна и таже инфа весит 2 метра в XML и 300 кило в json. я очень опечален тем что для того чтобы работать с xml мне придется отключить торент. Да php по большому счету все равно там и сакс парсер и дом есть, а вот джаве нет, она нативно использует xml зато для того чтобы была поддержка json надо подключать jar'ку. Еще один плюс xml это то что для поиска по нему можно использовать xpath а для поиска по json ты что будешь использовать?
  4. Костег
    20 Ноябрь 2010 в 23:13 | #4
    а у меня не сильно многомерные данные :P
  5. 21 Ноябрь 2010 в 00:23 | #5
    возьми какойто проект который имеет только XML API и приведи его себе в пример.
  6. 24 Ноябрь 2010 в 11:02 | #6
    Зачем поиск по иксемелю, если чаще всего работаешь с заведомо извесной структурой? Есть пример, когда к тебе входит неизвестный ексемель?
  7. 24 Ноябрь 2010 в 11:05 | #7
    я не говорю что xml неизвестный я говорю что там 25 уровней вложенности и я не буду делать 25 раз getElementByTagName, проще один раз XPath использовать
Комментирование отключено.