2009-12-15 5 views
1

Je tente de télécharger une page HTML et de l'analyser en utilisant XMLHttpRequest (sur le navigateur Safari le plus récent). Malheureusement, je ne peux pas le faire fonctionner!Analyse du code HTML avec 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); 

Le texte est téléchargé avec succès (réponse contient le code HTML valide), et est analysé dans un arbre correctement (doc représente un DOM valide pour la page). Toutefois, nodes.snapshotLength vaut 0, malgré le fait que la requête est valide et devrait avoir des résultats. Des idées sur ce qui ne va pas?

+0

Êtes-vous capable d'accéder via DOM "normal"? Aussi, vous pouvez directement utiliser 'xmlhttp.responseXML'. – poke

+0

Vous pouvez trouver réponse ici http://stackoverflow.com/questions/40729785/parsing-xmlhttprequest-result-using-xpath/40750779#40750779 – Leax

Répondre

1

Si vous utilisez soit:

  • une bibliothèque JS ou
  • vous disposez d'un navigateur moderne avec la méthode querySelectorAll disponible (Safari est un)

Vous pouvez essayer d'utiliser CSS sélecteurs pour analyser le DOM au lieu de XPATH.

1

Le code HTML n'est pas XML. Les deux ne sont pas interchangeables. À moins que le "HTML" ne soit réellement du XHTML, vous ne pourrez pas utiliser XPATH pour le traiter.

+0

Je comprends cela - mais Safari devrait être (et est, dans l'objet doc) le traitement du "laid" HTML en un DOM sympa, propre et conforme à XHTML, qui devrait pouvoir être utilisé avec XPath, n'est-ce pas? – Mike

+0

Je n'étais pas au courant de cette fonctionnalité de nettoyage magique de Safari. –