Как выполнить обход DOM с учетом пространства имен в XML-документах IE6..IE8?

Я реализую библиотеку javascript, которая общается с веб-службой SOAP. Я использую XMLHttpRequest для выполнения запросов и получения ответов. Ответы SOAP сильно зависят от нескольких пространств имен.

Для всех основных браузеров, кроме всех версий Internet Explorer, я могу использовать getElementsByTagNameNS() и getAttributeNS() для просмотра и анализа ответа. Но не в Internet Explorer.

Теперь я прочитал некоторую документацию (http://msdn.microsoft.com/en-us/library/ms756048(VS.85).aspx), в котором показано, как на самом деле можно использовать XPath с учетом пространства имен, если сначала установить свойство SelectionNamespace документа DOM. Это работает только в том случае, если вы знаете как URI пространства имен, который вы хотите принять во внимание (что разумно), так и префиксы пространств имен, которые используются в документе.

Это последнее требование кажется совершенно необоснованным — откуда мне знать, какие префиксы пространств имен используются? Сначала я подумал, что смогу полностью просмотреть документ и отслеживать все пространства имен и префиксы, но проблема в том, что ассоциация префикса/ури не является фиксированной для документа в целом, любой элемент может переопределить эти ассоциации в любом месте документа. Другой подход, о котором я подумал, заключается в поиске всех предков узла контекста, чтобы выяснить, какие комбинации префикса/пространства имен действуют для этого узла до оценки моего выражения XPath, и я думаю, что это сработает, если я могу гарантировать, что все выражения XPath выполняются последовательно, а не параллельно.

Есть ли способ лучше? Что люди используют для обхода DOM с учетом пространства имен в IE?


person Roland Bouman    schedule 12.02.2010    source источник


Ответы (1)


Вероятно, они используют регулярное выражение для поиска пространств имен перед обходом.

Если вам нужен синтаксический анализ xml на основе стандартов в клиентском сценарии, вы можете извлечь пользу из XML4Script. Он нуждается в ненавязчивом капитальном ремонте, но если вы справитесь с шумом в окне, это может помочь.

person Sky Sanders    schedule 12.02.2010
comment
Есть еще Сарисса (dev.abiss.gr/sarissa), которой я пользовалась раньше... не совсем по выбору, и я не знаю, рекомендую ли я его как таковой, но он работает. - person prodigitalson; 12.02.2010
comment
Спасибо вам обоим! Глядя на следы этих решений, я думаю, что буду стараться избегать этого до тех пор, пока действительно не смогу этого избежать. Будем надеяться, что к тому времени IE наконец-то будет поддерживать пространства имен ‹/optimism› - person Roland Bouman; 13.02.2010
comment
добро пожаловать. @son- Сарисса вылетела из головы. он актуален, довольно хорошо покрыт тестами, чист и использует базовые реализации, когда они доступны. будет хорошим выбором. - person Sky Sanders; 13.02.2010