Можно ли корректно анализировать 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() на нем.