Разбор HTML с помощью XPath/XMLHttpRequest

Я пытаюсь загрузить 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, несмотря на то, что запрос действителен и должен иметь результаты. Любые идеи о том, что происходит не так?


person Mike    schedule 15.12.2009    source источник
comment
Вы можете получить доступ через обычный DOM? Также вы можете напрямую использовать xmlhttp.responseXML.   -  person poke    schedule 16.12.2009
comment
Вы можете найти ответ здесь stackoverflow.com/ вопросы/40729785/   -  person Leax    schedule 22.11.2016


Ответы (2)


Если вы используете:

  • библиотека JS или
  • у вас есть современный браузер с доступным методом querySelectorAll (один из них — Safari)

Вы можете попробовать использовать селекторы CSS для анализа DOM вместо XPATH.

person Mic    schedule 15.12.2009

HTML — это не XML. Эти два не являются взаимозаменяемыми. Если «HTML» на самом деле не XHTML, вы не сможете использовать XPATH для его обработки.

person John Saunders    schedule 15.12.2009
comment
Я понимаю это, но Safari должен (и перерабатывает в объекте doc) преобразовывать уродливый HTML в красивый, аккуратный, XHTML-совместимый DOM, который можно использовать с XPath, верно? - person Mike; 16.12.2009