Я реализую библиотеку 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?