Я реализую библиотеку javascript, которая взаимодействует с веб-сервисом SOAP. Я использую XMLHttpRequest для выполнения запросов и получения ответов. Ответы SOAP сильно зависят от нескольких пространств имен.
Для всех основных браузеров, кроме всех версий Internet Explorer, я могу использовать getElementsByTagNameNS()
и getAttributeNS()
для обхода и анализа ответа. Но не в Internet Explorer.
Теперь я прочитал некоторую документацию (http://msdn.microsoft.com/en-us/library/ms756048(VS.85).aspx), в которой указано, как на самом деле можно использовать XPath с поддержкой пространства имен, если вы сначала задаете свойство SelectionNamespace
документа DOM. Это работает, только если вы знаете оба пространства имен Uris, который вы хотите учесть (что разумно), а также префиксы пространства имен, которые документ использует.
Последнее требование кажется совершенно необоснованным - откуда мне знать, какие префиксы пространства имен используются? Сначала я подумал, что могу полностью пройти по документу и отслеживать все пространства имен и префиксы, но проблема в том, что связь префикса / uri не зафиксирована для документа в целом, любой элемент может переопределить эти ассоциации в любом месте документа. Другой подход, о котором я подумал, - это поиск по всем предкам узла контекста, чтобы выяснить, какие комбинации префикса / пространства имен действуют для этого узла, до оценки моего выражения XPath, и я думаю, что это сработает, если я смогу гарантировать, что все выражения XPath соответствуют выполняется последовательно, а не параллельно.
Есть ли лучший способ? Что люди используют для обхода DOM с учетом пространства имен в IE?