从外部Web服务获取XML

时间:2011-12-06 10:29:33

标签: jquery ajax web-services

我正在做一个mashup作为个人项目,我正在尝试使用我发现的网络服务。

可以在此处找到网络服务:

http://www.html2xml.nl/Services/html2xml/version1/Html2Xml.asmx?op=HtmlString2XmlNode

当我尝试通过ajax调用它时,我总是收到以下消息(在这种情况下使用FireFox 7):

  

Error dectura XML:no se encuentraelementoUbicación:   moz-nullprincipal:{c46bfb1b-719d-490b-8293-a2eabd2ac15a}Númerode   línea1,columna 1:

谷歌翻译版:

  

XML读取错误:找不到元素位置:moz-nullprincipal   {719d-490b-c46bfb1b-8293-a2eabd2ac15a}第1行第1列的数量:

我尝试了几种方式($ ajax,JQuery.get等),我总是撞到同一堵墙......

您可以尝试例如:http://www.html2xml.nl/Services/html2xml/version1/Html2Xml.asmx/Url2XmlNode?urlAddress=www.google.es

如果你在浏览器中执行它似乎有效,但我不知道问题是跨域问题还是XML的输出格式......

有人知道如何解决这个问题吗? (我看过类似的帖子,没有明确的解决方案)。

我正在使用的代码是:

var envelope =
                    {
                    urlAddress: "www.google.es"
                    }

$.ajax({
                    url: "http://www.html2xml.nl/Services/html2xml/version1/Html2Xml.asmx/Url2XmlNode",
                    dataType: 'xml',
                    data : envelope,
                    dataFilter: function (data, type) {
                    alert(data);
                    alert(type);
                    }
                    });

谢谢!

1 个答案:

答案 0 :(得分:1)

您使用的网络服务未从Google的页面返回有效的xml。如果您在Google的页面上查看来源,则在标记后不久您会看到以下标记:

<textarea id=csi style=display:none></textarea>

如果您从Web服务查看Source的相同位置,它会将空节点转换为自动关闭标记,但在其后面留下一个挂起的CDATA标记。<​​/ p>

<textarea id="csi" style="display:none" /><![CDATA[]]>

如果您的dataFilter函数正在触发,您可以对响应执行替换('<![CDATA[]]>',''),但我认为您的错误发生在此之前。在这种情况下,将dataType更改为“text”,如果dataFilter函数删除空CDATA并将文本字符串转换为要返回的xml对象。可能需要花一点时间才能使它工作,我还看到了一些关于转换器的信息,如果遇到问题,你可能会想看看。