【问题标题】:Parsing HTML with XPath/XMLHttpRequest使用 XPath/XMLHttpRequest 解析 HTML
【发布时间】:2009-12-16 05:50:21
【问题描述】:

我正在尝试下载一个 HTML 页面,并使用 XMLHttpRequest(在最新的 Safari 浏览器上)对其进行解析。不幸的是,我无法让它工作!

var url = "http://google.com";

xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET", url);

xmlhttp.onreadystatechange  = function(){
    if(xmlhttp.readyState==4){
        response = xmlhttp.responseText;
        var doc = new DOMParser().parseFromString(response, "text/xml");
        console.log(doc);
        var nodes = document.evaluate("//a/text()",doc, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null);
        console.log(nodes);
        console.log(nodes.snapshotLength);
        for(var i =0; i<nodes.snapshotLength; i++){
            thisElement = nodes.snapshotItem(i);
            console.log(thisElement.nodeName);
        }
    }
};
xmlhttp.send(null);

文本被成功下载(响应包含有效的 HTML),并被正确解析为树(doc 代表页面的有效 DOM)。然而,nodes.snapshotLength 是 0,尽管查询是有效的并且应该有结果。关于出了什么问题的任何想法?

【问题讨论】:

标签: javascript xpath xmlhttprequest


【解决方案1】:

如果您使用的是:

  • 一个 JS 库或
  • 您的现代浏览器具有可用的 querySelectorAll 方法(Safari 就是其中之一)

您可以尝试使用 CSS 选择器而不是 XPATH 来解析 DOM。

【讨论】:

    【解决方案2】:

    HTML 不是 XML。两者不可互换。除非“HTML”实际上是 XHTML,否则您将无法使用 XPATH 来处理它。

    【讨论】:

    • 我明白 - 但是 Safari 应该(并且是,进入 doc 对象)将“丑陋”的 HTML 处理成一个漂亮、整洁、兼容 XHTML 的 DOM,它应该能够与XPath,对吧?
    猜你喜欢
    • 2017-04-05
    • 2014-07-06
    • 1970-01-01
    • 2012-07-19
    • 2012-08-23
    • 2011-06-03
    • 1970-01-01
    • 2014-07-13
    • 2012-07-12
    相关资源
    最近更新 更多