2009-12-15 2 views
1

Я пытаюсь загрузить HTML-страницу и проанализировать ее с помощью XMLHttpRequest (в последнем браузере Safari). К сожалению, я не могу заставить его работать!Анализ HTML с XPath/XMLHttpRequest

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), и правильно разобран в дерево (документ представляет собой действительный DOM для страницы). Однако node.snapshotLength равно 0, несмотря на то, что запрос действителен и должен иметь результаты. Любые идеи о том, что происходит не так?

+0

Вы можете получить доступ через «нормальный» DOM? Также вы можете напрямую использовать 'xmlhttp.responseXML'. – poke

+0

Здесь вы можете найти ответ http://stackoverflow.com/questions/40729785/parsing-xmlhttprequest-result-using-xpath/40750779#40750779 – Leax

ответ

1

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

  • библиотека JS или
  • у вас есть современный браузер, с помощью метода querySelectorAll доступного (Сафари один)

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

1

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

+0

Я понимаю это - но Safari должен быть (и есть, в объект doc) обрабатывая «уродливый» HTML в хороший, аккуратный, совместимый с XHML DOM, который должен быть доступен с XPath, верно? – Mike

+0

Я не знал об этой волшебной функции очистки Safari. –