1

背景:

我正在尝试将 Google 搜索结果包含在我正在创建的页面中。这些搜索结果采用XML格式。

目前我正在像这样导入 XML:

if (window.XMLHttpRequest) {
    // Code for Internet Explorer7+, Firefox, Chrome, Opera, and Safari
    xmlhttp = new XMLHttpRequest();
}
else {
    // Code for Internet Explorer 6 and Internet Explorer 5
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open("GET", "foo", false);
xmlhttp.send();
xmlDoc = xmlhttp.responseXML;

保存搜索结果的 XML 文件fooURL在哪里。

问题:

这完美地工作,但仅当foo以适当的扩展名结束时,例如.xml. 这带来了一个问题,因为包含搜索结果 ( http://search.domain.com/search?q=queryString&output=xml) 的页面没有扩展名。

当我尝试xmlhttp.open()使用搜索结果的 URL 进行调用时,xmlhttp.send()失败并且它后面的任何函数或命令都不会执行。

我尝试了几种使用jQuery和纯 JavaScript 导入/解析文件的不同方法,但它们似乎都不起作用。

问题:

有没有办法只导入无扩展名文件的文本?然后我就可以使用parseFromString. 这将允许我获取我需要的数据,但只能通过将搜索结果中的所有文本(无论数量)复制到我的页面中。

如果有一种方法可以让我打开无扩展名页面并将其解析为 XML 文件,我会更愿意。

如果您需要更多信息,请告诉我。


这是应该返回的代码:

<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
<!DOCTYPE GSP SYSTEM "google.dtd">
<GSP VER="3.2">
  <TM>TimeTaken(in seconds)</TM>
  <Q>queryString</Q>
  <PARAM name="q" value="queryString" original_value="queryString"/>
  <PARAM name="output" value="xml" original_value="xml"/>
  <PARAM name="ie" value="UTF-8" original_value="UTF-8"/>
  <PARAM name="ulang" value="en" original_value="en"/>
  <PARAM name="ip" value="ipAddress" original_value="ipAddress"/>
  <PARAM name="access" value="p" original_value="p"/>
  <PARAM name="sort" value="date:D:L:d1" original_value="date:D:L:d1"/>
  <RES SN="1" EN="10">
    <M><!-- The estimated total number of results for the search -->3560</M>
    <FI/>
    <NB>
      <NU>/search?q=queryString&amp;lr=&amp;ie=UTF-8&amp;output=xml&amp;access=p&amp;sort=date:D:L:d1&amp;start=10&amp;sa=N</NU>
    </NB>
    <!-- First result -->
    <R N="1"> <U><!--URL of result-->http://www.google.com?option=42</U>
      <UE><!--URL of result with special characters changed to html
              equivalent-->http://www.google.com%3Foption%3D</UE>
      <T><!--Title of result -->Google </T>
      <RK><!--Query Ranking
              10(highest relevance)-1(lowest relevance)-->10</RK>
      <ENT_SOURCE> <!--Identifies the application ID (serial number) of the
                      search appliance that contributes to a result.-->
        S5-KUB000F0ADETLA </ENT_SOURCE>
      <FS NAME="date" VALUE=""/>
      <S><!-- Snippet for the search result --> Search the world's information,
      including webpages, images, videos and more. <em>Google</em> has many
      special features to help you find exactly what you're looking&nbsp;
      <b>...</b></S><LANG>en</LANG>
      <HAS><!--special features that are included for this search result-->
        <L/>
        <C SZ="30k" CID="TiXnj_p8qlgJ" ENC="ISO-8859-1"/>
      </HAS>
    </R>
  </RES>
</GSP>

现在我仔细看了一下,Google 在使用时向我承诺的 XML 代码看起来&output=xml并不那么“xml-ey”。有没有办法解决这个问题,还是我必须放弃我的项目?

我能够让这个相同的“XML”与 php 解析器很好地工作,但我被要求将所有内容都更改为 JavaScript 而不是PHP

4

1 回答 1

0

由于您已经在使用jQuery,因此只需使用它的.ajax方法,当 dataType 选项设置为“xml”时,该方法可以自动解析 XML。

jQuery.ajax({
   url:"http://example.com/someurl",
   dataType:"xml",
   success:function(xml) {
      //xml will be an object which you can use to access the elements.
   }
});

如果正在检索的文件的内容类型被发送为 例如text/html,您可以更改dataType为 ,'text xml'以便 jQuery 知道以 XML 格式查看文本。

但是,如果您想继续使用 vanilla JavaScript 来执行Ajax请求,则必须先获取.responseText而不是.responseXML然后解析

var xmlDoc = new DOMParser().parseFromString(xmlhttp.responseText,'text/xml');

请注意,DOMParser 不完全受支持,例如 9 以下的 Internet Explorer 不支持它。

于 2013-10-05T00:20:52.200 回答