2011-02-04 4 views
4

Je travaille actuellement avec un framework d'automatisation qui tire une page Web vers le bas pour analyse, qui est ensuite présentée comme une chaîne de traitement. Le moteur Javascript de Rhino est disponible pour faciliter l'analyse de la page Web renvoyée.Charger une chaîne HTML dans l'arborescence DOM avec Javascript

Il semble que si la chaîne (qui est une page Web complète) peut être chargée dans une représentation DOM, cela fournirait une très belle interface pour analyser et analyser le contenu.

En utilisant uniquement Javascript, est-ce un concept possible et/ou faisable?

Edit:

Je décomposons la question pour clarifier: Dire que j'ai une chaîne en javascript qui contient html comme par exemple:

 

var $mywebpage = '<!DOCTYPE HTML PUB ...//snipped//... </body></html>'; 
 

est-il possible/réaliste de le charger en quelque sorte dans un objet dom?

+0

Si je comprends bien, vous pouvez ajouter une chaîne html au corps d'un document 'document.body.innerHTML =" string "' – JCOC611

Répondre

0

Si vous avez cette variable qui contient du code HTML, vous pouvez le charger dans un objet DOM, par exemple, par ID.

var mywebpage = '<!DOCTYPE HTML PUB ...//snipped//... </body></html>'; 

element = document.getElementById('dom-id'); //<-- element you are loading it into. 

element.innerHTML = mywebpage; 
+0

C'est un pas dans la bonne direction. Comme j'utilise Rhino, je ne sais pas si je peux réellement accéder ou éventuellement 'créer' un objet dom. Je continuerai à regarder ceci et à mettre à jour pendant que j'apprends plus. – xelco52

+0

ok, eh bien, tant que vous avez une chaîne de caractères html, il va charger dans n'importe quel élément DOM que vous sélectionnez. – jondavidjohn

1

J'accepte la réponse de JonDavidJohn comme il a été utile pour résoudre mon problème, y compris la pensée cette réponse supplémentaire pour d'autres qui peuvent voir à l'avenir.

Il semble que, bien que Javascript autorise le chargement de chaînes html dans un élément DOM, DOM ne fait pas partie du noyau ECMAScript et n'est donc pas disponible pour les scripts s'exécutant sous Rhino.

Comme note complémentaire, une bonne alternative implémentée dans Rhino 1.6 est E4X. Bien que n'étant pas une implémentation DOM, elle fournit des capacités conceptuellement similaires.

1

Si le document est en XHTML, vous pouvez l'analyser avec n'importe quel analyseur XML. E4X ferait probablement bien le travail, tout comme les interfaces de parsing Java XML intégrées.

La bibliothèque env.js est conçu pour émuler l'environnement du navigateur sous Rhino, mais je crois que votre document doit également être conforme XHTML:

http://ejohn.org/blog/bringing-the-browser-to-the-server/

http://www.envjs.com/

Si c'est HTML, mais , c'est plus difficile, car les navigateurs sont conçus pour être extrêmement indulgents dans la façon dont le balisage est analysé. Voir ici pour une liste de parseurs HTML en Java:

http://java-source.net/open-source/html-parsers

Ce n'est pas un problème facile à résoudre. Les gens sont allés jusqu'à intégrer le moteur Mozilla Gecko en Java via JNI afin d'utiliser ses capacités d'analyse.

Je vous recommande de regarder dans le projet pur Java suivant:

http://lobobrowser.org/cobra.jsp

L'objectif du projet Lobo est de développer un navigateur Web Java pure.C'est un projet très intéressant, et il y a beaucoup là-bas, mais je crois que vous pouvez utiliser la version autonome de l'analyseur facilement dans votre propre application, comme décrit dans le lien suivant:

http://lobobrowser.org/cobra/java-html-parser.jsp

Questions connexes