2010-02-12 85 views
2

我正在实现一个与SOAP Web服务对话的JavaScript库。我使用XMLHttpRequest来执行请求并接收响应。 SOAP响应严重依赖于多个名称空间。如何在IE6..IE8 xml文档中进行名称空间感知DOM遍历?

对于除所有版本的Internet Explorer之外的所有主流浏览器,我可以使用getElementsByTagNameNS()getAttributeNS()来遍历和解析响应。但不是在Internet Explorer中。

现在,我已经阅读了一些文档(http://msdn.microsoft.com/en-us/library/ms756048(VS.85).aspx),它指出如果您首先设置了DOM文档的SelectionNamespace属性,您实际上可以如何使用名称空间感知XPath。这只有当你知道你想要考虑的名称空间uris(这是合理的)以及文档碰巧使用的名称空间前缀时才有效。

这最后一项要求看起来完全不合理 - 我该如何知道哪些名称空间前缀恰巧被使用?我首先想到,我可以完全遍历文档并跟踪所有的名称空间和前缀,但问题在于前缀/ URI关联对于整个文档不是固定的,任何元素都可能在文档中的任何位置重新定义这些关联。我想到的另一种方法是搜索上下文节点的所有祖先,以在评估XPath表达式之前发现该节点的哪些前缀/名称空间组合已生效,并且我认为如果我可以保证所有XPath表达式都是串行执行而不是并行执行。

有没有更好的方法?人们在IE中使用什么来进行名称空间感知的DOM遍历?

回答

0

它们可能是正则表达式在遍历之前将名称空间转移出去。

如果在客户端脚本中基于标准的xml解析是你所追求的,你可能会从XML4Script中获得一些里程数。它需要一个不显眼的检修,但如果你能处理窗口中的噪音,它可能会有所帮助。

+1

还有Sarissa(http://dev.abiss.gr/sarissa),之前使用过......不是真的由选择,我不知道ID本身推荐它,但它的工作原理。 – prodigitalson 2010-02-12 16:01:36

+0

感谢你们俩!看看这些解决方案的覆盖面,我想我会尝试去解决它,直到我再也无法避免这种情况发生。希望IE能够在那个时候最终支持命名空间 – 2010-02-13 15:52:32

+0

欢迎您。 @ son-sarissa滑倒了我的脑海。它是目前的,相当好的测试覆盖,干净,并在可用时使用基础implmenetations。将是一个不错的选择。 – 2010-02-13 16:07:48