使用 jquery 从 asp.net webservice 解析简单的 xml

Posted

技术标签:

【中文标题】使用 jquery 从 asp.net webservice 解析简单的 xml【英文标题】:parsing simple xml with jquery from asp.net webservice 【发布时间】:2011-05-06 16:40:16 【问题描述】:

我现在正在为此烦恼一段时间,但我不知道我做错了什么。 场景如下,我正在使用 swfupload 上传带有进度条的文件 通过网络服务。 webservice 需要返回生成的缩略图的名称。 这一切都很顺利,虽然我更喜欢在 json 中获取返回的数据(可能稍后在 swfupload js 文件中更改它),但默认的 xml 数据也很好。

因此,当上传完成时,webservice 会按预期返回以下 xml(注意我删除了 webservice 中的命名空间):

<?xml version="1.0" encoding="utf-8"?>
<string>myfile.jpg</string>

现在我想用 jquery 解析这个结果,并认为下面会做到这一点:

 var xml = response;
 alert($(xml).find("string").text());

但我无法获取字符串值。我尝试了很多组合(.html()、.innerhtml()、response.find("string").text() 但似乎没有任何效果。这是我第一次尝试通过 jquery 解析 xml 所以也许我'我在做一些根本错误的事情。'response' 是用 xml 填充的。

我希望有人可以帮助我解决这个问题。 感谢您的宝贵时间。

亲切的问候, 标记

【问题讨论】:

【参考方案1】:

我认为 $(xml) 正在寻找一个带有与 XML 的字符串值匹配的选择器的 dom 对象,所以我猜它会返回 null 或空?

下面提到的第一个插件xmldom 看起来很不错,但是如果您返回的 XML 确实像上面的示例一样简单,那么稍微解析一下字符串可能会更快,例如:

var start = xml.indexOf('<string>') + 8;
var end = xml.indexOf('</string>');
var resultstring = xml.substring(start, end);

从this answer到这个问题:How to query an XML string via DOM in jQuery

引用:

有两种方法可以解决这个问题。

    将 XML 字符串转换为 DOM,使用 plugin 解析它或遵循 tutorial 使用此plugin 将 XML 转换为 JSON。

【讨论】:

非常感谢您的解决方案,我现在会选择字符串解析方法,甚至没有想到这一点。当对象变大时,我会选择 xml to json 插件。谢谢拯救了我的一天!【参考方案2】:

jQuery 无法解析 XML。如果您将一个包含 XML 内容的字符串传递给 $ 函数,它通常会尝试将其解析为 HTML,而不是使用标准的 innerHTML。如果您确实需要解析一个完整的 XML 字符串,您将需要特定于浏览器且不受全局支持的方法,例如 new DOMParserXMLDOM ActiveXObject,或者包装它们的插件。

但您几乎不需要这样做,因为XMLHttpRequest 应该在responseXML 属性中返回完全解析的XML DOM。如果您的 Web 服务正确设置了 Content-Type 响应标头以告诉浏览器返回的是 XML,那么回调函数的 data 参数应该是 XML 文档对象而不是字符串。在这种情况下,您应该可以毫无问题地将您的示例与 find()text() 一起使用。

如果服务器端未返回 XML Content-Type 标头并且您无法修复该问题,则可以将 ajax settings 中的选项 type: 'xml' 作为覆盖传递。

【讨论】:

以上是关于使用 jquery 从 asp.net webservice 解析简单的 xml的主要内容,如果未能解决你的问题,请参考以下文章

如何在 asp.net 中使用 JSON 和 JQuery 从 WebMethod 返回 DataTable?

使用asp.net从数据库中自动完成JQuery

从 JQUERY 传递数据 | AJAX 处理 ASP.NET

扩展从 JQuery 调用 Web 服务时从 ASP.NET 引发的异常

如何使用 jQuery 和 ASP.NET MVC 从 AJAX 调用返回错误消息?

从 jQuery 中选择多个文件后,ASP.Net 上传多个文件