Можно ли корректно анализировать XML с использованием синтаксиса jQuery $(responseXML)?
В настоящее время я ищу простой способ извлечения информации из XML-ответов сервера с помощью JavaScript. jQuery кажется хорошим кандидатом для этого.
Когда дело доходит до разбора XML с помощью jQuery, я продолжаю сталкиваться с примерами кода, подобными следующему фрагменту:
function parseXml(responseXml) {
$(responseXml).find('someSelector')...
}
Тем не менее, в документации JQuery Core (цитата ниже) четко указано, что вы не должны этого делать:
jQuery( html, [ ownerDocument ] )
html
Строка HTML для создания на лету. Обратите внимание, что это анализирует HTML, не XML.
— http://api.jquery.com/jQuery/#jQuery2
Это заставляет меня задаться вопросом, почему так много онлайн-ресурсов, тем не менее, предлагают разбор XML через $(responseXml)
. Это вообще работает без каких-либо проблем, несмотря на то, что говорит документация API? В каких случаях синтаксический анализ XML как это на самом деле не работает?
Ответы
Ответ 1
Документация jQuery ajax добавляет http://api.jquery.com/jQuery.ajax/:
dataType
"xml": возвращает XML-документ, который может обрабатываться через jQuery.
... Если сервер сообщает данные возврата как XML, результат может быть пройден с использованием обычных методов XML или селекторов jQuery...
Также на http://api.jquery.com/jQuery/
Когда XML-данные возвращаются из вызова Ajax, мы можем использовать функцию $(), чтобы обернуть ее в объект jQuery, с которым мы можем легко работать. Как только это будет сделано, мы можем получить отдельные элементы структуры XML, используя методы .find() и другие методы обхода DOM.
Ответ 2
Я не знаю, может ли мой опыт быть обобщен, но у меня была своя доля проблем, анализирующих сообщения SOAP с помощью jQuery. Вероятно, это не относится к jQuery (поскольку вы указываете, что документация не поддерживает его).
В любом случае, вы задали специфику: я обнаружил, что все пространства имен являются проблематичными. Конечно, для подлинного понимания пространства имен вам потребуется что-то, что может разрешить префиксы пространства имен для URI пространства имен. Я никогда не ожидал, что jQuery сможет это сделать, но даже сопоставление только префиксов не сработало для меня. Это особенно проблематично для меня, потому что сообщения SOAP, с которыми я имею дело, легко смешивают 4 или 5 пространства имен. Поэтому я вернулся к тому, чтобы сделать DOM для себя, чтобы решить эту проблему (у которой есть свой набор проблем).
Тем не менее, я ожидаю, что jQuery сможет обрабатывать xhtml-документы (пока имена тегов не префиксны), и я ожидаю, что он будет работать и для других XML-документов, которые не используют префиксы пространства имен.
Ответ 3
Ваша ссылка фактически указывает на использование jQuery( html )
, который имеет дело с созданием элементов из строк, т.е.
$('<a href="..."></a>')
Тот, который использует ваш код, jQuery( element )
, который подходит для XML.
поскольку responseXML - это XML, а не строка, вы можете использовать jQuery()
на нем.