可以使用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文档。