可以使用jQuery的$(responseXML)语法可靠地解析XML吗?

我目前正在寻找一种使用JavaScript从服务器XML响应中提取信息的简单方法。 jQuery似乎是一个很好的候选人。

在使用jQuery解析XML时,我不断遇到类似于以下代码段的代码示例:

function parseXml(responseXml) { $(responseXml).find('someSelector')... } 

然而,jQuery Core文档(下面引用)明确指出你不应该这样做:

jQuery( html, [ ownerDocument ] )

html即时创建的HTML字符串。 请注意,这解析HTML 而不是 XML。

– http://api.jquery.com/jQuery/#jQuery2

这让我想知道为什么这么多的在线资源建议通过$(responseXml)解析XML。 尽管API文档说的是什么,这通常没有任何问题吗? 在什么情况下解析这样的XML实际上不起作用?

jQuery ajax文档添加了http://api.jquery.com/jQuery.ajax/ :

数据类型

“xml”:返回可以通过jQuery处理的XML文档。

https://stackoverflow.com/questions/2124924/can-xml-be-parsed-reliably-using-jquerys-responsexml-syntax/…如果服务器将返回数据报告为XML,则可以使用普通XML方法或jQuery选择器遍历结果https://stackoverflow.com/questions/2124924/can-xml-be-parsed-reliably-using-jquerys-responsexml-syntax/…

也在http://api.jquery.com/jQuery/

当从Ajax调用返回XML数据时,我们可以使用$()函数将其包装在我们可以轻松使用的jQuery对象中。 完成此操作后,我们可以使用.find()和其他DOM遍历方法检索XML结构的各个元素。

我不知道我的经验是否可以概括,但我有一些问题,用jQuery解析SOAP消息。 这可能不是jQuery(正如你指出文档反对它)。

无论如何,你要求具体细节:我发现名称空间的一切都有问题。 当然,对于真正的命名空间感知,您需要能够将命名空间前缀解析为命名空间URI的东西。 我从没想过jQuery能够做到这一点,但即使只匹配前缀也不适合我。 这对我来说尤其成问题,因为我正在处理的SOAP消息很容易混合4或5个命名空间。 所以我回到自己做DOM遍历来解决这个问题(它有一系列问题)

也就是说,我确实希望jQuery能够处理xhtml文档(只要标签名称没有前缀),我希望它也能用于其他不使用名称空间前缀的xml文档。

您的链接实际上指向jQuery( html )的使用,它处理从字符串创建元素,即

 $('') 

您的代码使用的是jQuery( element ) ,它适用于XML。

因为responseXML是XML而不是字符串,所以你可以自由地使用jQuery()