【问题标题】:Read page XML using Javascript使用 Javascript 读取页面 XML
【发布时间】:2011-03-11 03:14:57
【问题描述】:

大家好,这让我发疯了,所以我想问问这个网站上的专家,看看你是否知道怎么做 =)

我正在尝试创建一些可以读取网页元素的 javascript 代码(例如,第一段说什么?)。这是我到目前为止所拥有的,但它不起作用,我不知道为什么:

<script type="text/javascript">
<!--
var req;
// handle onreadystatechange event of req object
function processReqChange() {
    // only if req shows "loaded"
    if (req.readyState == 4) {
        // only if "OK"
        if (req.status == 200) {
            //document.write(req.responseText);
            alert("done loading");

            var responseDoc = new DOMParser().parseFromString(req.responseText, "text/xml");
            alert(responseDoc.evaluate("//title",responseDoc,null,
                        XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue);
         } 
         else {
            document.write("<error>could not load page</error>");
         }
    }
}

req = new XMLHttpRequest();
req.onreadystatechange = processReqChange;
req.open("GET", "http://www.apple.com", true);
req.send(null);
// -->

不断出现的警报是“null”,我不知道为什么。有什么想法吗?

【问题讨论】:

  • 简单问题...您是否尝试过控制台记录 responseText 以确保它是有效的 XML?能否提交 XML 以供查看?据我所知,您的 xPath 字符串很好,您对评估的使用也很好...
  • 使用它的方式将不会总是有效的 xml。不确定这是否是问题所在,但我怎样才能让它也读取脏 xml? (或者只使用 dom 结构)
  • DomParser 对正确格式化的 XML 非常挑剔。我自己也遇到过问题。对于错过的“>”等,这不是很宽容。
  • 哦,您可以尝试在 XML 的开头添加 '&lt;?xml version="1.0" encoding="UTF-8" ?&gt;,以确保解析器将其视为 XML

标签: javascript dom xmlhttprequest domparser


【解决方案1】:

这可能是由于跨域限制...除非您在 apple.com 上托管您的网页。 :) 您也可以使用 jQuery 并避免写出所有这些内容和/或处理任何常见的可能的跨浏览器 XML 加载/解析问题。 http://api.jquery.com/category/ajax/

更新: 看起来它可能与源网站的 Content-Type 或类似的东西有关......例如,这段代码似乎工作......(注意加载的域......)


var req;
// handle onreadystatechange event of req object
function processReqChange() {
    // only if req shows "loaded"
    if (req.readyState == 4) {
        // only if "OK"

        if (req.status == 200) {
            //document.write(req.responseText);
            //alert("done loading");
            //alert(req.responseText);

            var responseDoc = new DOMParser();
            var xmlText = responseDoc.parseFromString(req.responseText, "text/xml");
            try{
              alert(xmlText.evaluate("//title",xmlText,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue);
            }catch(e){
              alert("error");
            }
         } 
         else {
            document.write("could not load page");
         }
    }
}

req = new XMLHttpRequest();
req.onreadystatechange = processReqChange;
req.open("GET", "http://www.jquery.com", true);
req.send(null);

我还尝试加载 espn.com 和 google.com,并注意到它们都有“Content-Encoding:gzip”,所以也许这就是问题所在,只是猜测。

【讨论】:

  • 不,它会加载文本。你可以通过 alert(req.responseText);它将显示来自苹果网站的所有 html 代码。
  • 在什么浏览器中?在将其上传到我的服务器后,我在 Mac OS 上的 Chrome 中看到“无法加载页面”。当我提醒 req.responseText 时,它是一个空警报。您使用的是有效的 DOCTYPE 吗?
  • 你是否包含了结尾?由于某些原因,stackoverflow 将其切断
  • 是的!您是在 Web 服务器上测试,还是在本地加载文件?
  • 在本地加载它。以及它的野生动物园(刚刚意识到我之前没有回答)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-27
相关资源
最近更新 更多