使用 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 DOMParser
和 XMLDOM
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?
从 JQUERY 传递数据 | AJAX 处理 ASP.NET
扩展从 JQuery 调用 Web 服务时从 ASP.NET 引发的异常