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

时间:2010-01-23 22:00:09

标签: jquery xml parsing

我目前正在寻找一种使用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实际上工作?

3 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:3)

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

  

dataType

     

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

     

...如果服务器将返回数据报告为XML,则可以使用普通的XML方法或jQuery的选择器遍历结果......

同样在http://api.jquery.com/jQuery/

  

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

答案 2 :(得分:3)

您的链接实际上指的是jQuery( html )用于处理字符串元素创建的用法,即

$('<a href="..."></a>')

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

由于responseXML是XML而不是字符串,因此您可以自由使用jQuery()