Можно ли надежно анализировать XML с использованием синтаксиса $ (responseXML) в jQuery? - PullRequest
3 голосов
/ 24 января 2010

В настоящее время я ищу простой способ извлечения информации из XML-ответов сервера с использованием JavaScript. JQuery кажется хорошим кандидатом для этого.

Когда дело доходит до синтаксического анализа XML с помощью jQuery, я продолжаю сталкиваться с примерами кода, подобными следующему фрагменту:

function parseXml(responseXml) {

    $(responseXml).find('someSelector')...

}

Тем не менее, в документации jQuery Core (цитата ниже) четко сказано, что вы не должны этого делать:

jQuery( html, [ ownerDocument ] )

html Строка HTML для создания на лету. Обратите внимание, что это анализирует HTML, , а не XML.

* * & 1 022 mdash;
http://api.jquery.com/jQuery/#jQuery2

Это заставляет меня задуматься, почему так много онлайн-ресурсов, тем не менее, предлагают парсинг XML через $(responseXml). Работает ли это вообще без проблем, несмотря на то, что написано в документации API? В каких случаях синтаксический анализ XML, как этот, на самом деле не будет работать?

Ответы [ 3 ]

4 голосов
/ 24 января 2010

Я не знаю, можно ли обобщить мой опыт, но у меня была доля проблем с анализом SOAP-сообщений с помощью jQuery. Это, вероятно, не относится к jQuery (как вы указали в документации, это не рекомендуется).

Во всяком случае, вы спросили об особенностях: я обнаружил, что все с пространствами имен проблематично. Конечно, для подлинного понимания пространства имен вам понадобится что-то, что может разрешить префиксы пространства имен в URI пространства имен. Я никогда не ожидал, что jQuery сможет это сделать, но даже сопоставление только префиксов не сработало для меня. Это особенно проблематично для меня, потому что сообщения SOAP, с которыми я имею дело, легко смешивают 4 или 5 пространств имен. Поэтому я вернулся к выполнению обхода DOM для решения этой проблемы (которая имеет свой собственный набор проблем)

Тем не менее, я ожидаю, что jQuery сможет обрабатывать документы xhtml (если имена тегов не имеют префикса), и я ожидаю, что он будет работать и для других документов xml, которые не используют префиксы пространства имен.

3 голосов
/ 24 января 2010

Ваша ссылка фактически указывает на использование jQuery( html ), которое связано с созданием элементов из строк, т. Е.

$('<a href="..."></a>')

В вашем коде используется jQuery( element ), что хорошо для XML.

, поскольку responseXML - это XML, а не строка, вы можете использовать jQuery() для него.

3 голосов
/ 24 января 2010

Документация 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...