我正在实现一个与 SOAP 网络服务对话的 javascript 库。我使用 XMLHttpRequest 来做请求和接收响应。SOAP 响应严重依赖多个名称空间。
对于所有主流浏览器,除了所有版本的 Internet Explorer,我都可以使用getElementsByTagNameNS()
andgetAttributeNS()
来遍历和解析响应。但不在 Internet Explorer 中。
现在,我已经阅读了一些文档(http://msdn.microsoft.com/en-us/library/ms756048(VS.85).aspx),这些文档表明如果您首先设置SelectionNamespace
属性,您实际上可以如何使用命名空间感知 XPath DOM 文档。仅当您知道要考虑的名称空间 uri(这是合理的)以及文档碰巧使用的名称空间前缀时,这才有效。
最后一个要求似乎完全不合理——我怎么知道碰巧使用了哪些命名空间前缀?我首先认为我可以完全遍历文档并跟踪所有命名空间和前缀,但问题是前缀/uri 关联对于整个文档来说并不是固定的,任何元素都可能在文档中的任何位置重新定义这些关联。我想到的另一种方法是在评估我的 XPath 表达式之前搜索上下文节点的所有祖先,以发现哪些前缀/命名空间组合对该节点有效,我认为如果我可以保证所有 XPath 表达式都是串行执行而不是并行执行。
有没有更好的办法?人们在 IE 中使用什么来进行命名空间感知 DOM 遍历?