2010-01-23 78 views
3

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

当谈到与jQuery解析XML,我不断遇到类似下面的代码片段的例子来:

function parseXml(responseXml) { 

    $(responseXml).find('someSelector')... 

} 

然而,jQuery的核心文档(以下报价)明确指出,你不应该要做到这一点:

jQuery(html, [ ownerDocument ])

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

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

这使我不知道为什么有这么多的在线资源仍然建议通过$(responseXml)解析XML。尽管API文档说了什么,这通常是否可以毫无问题地工作?在什么情况下会这样解析XML实际上而不是工作?

回答

3

jQuery的AJAX文件添加http://api.jquery.com/jQuery.ajax/

的dataType

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

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

此外,在http://api.jquery.com/jQuery/

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

4

我不知道我的经验是否可以推广,但是我有我用jQuery解析SOAP消息的问题。这可能不是jQuery的问题(​​正如你指出文档不赞同它)。

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

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

3

您的链接实际指向的是jQuery(html)使用与创作从琴弦元素的交易,即

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

您的代码使用是jQuery(element)这是好的XML的一个。

由于responseXML是XML的,而不是一个字符串,你可以自由地使用jQuery()就可以了。

+0

我没有意识到,'responseXml'是没有字符串,可能是因为我做了一些实验(例如'$(“ ...”)'),并且似乎工作排序。 – stakx 2010-01-23 22:28:24

相关问题