使用Javascript将HTML字符串加载到DOM树中

6
我目前正在使用一个自动化框架,它会将一个网页下载下来进行分析,然后呈现为字符串进行处理。Rhino JavaScript引擎可用于帮助解析返回的网页。
如果该字符串(完整网页)可以加载到DOM表示中,则提供了一种非常好的界面来解析和分析内容。
仅使用JavaScript,这是一个可能且可行的概念吗?
编辑:为了澄清问题,假设我在JavaScript中有一个包含HTML的字符串,如下所示:
var $mywebpage = '<!DOCTYPE HTML PUB ...//snipped//... </body></html>';
是否有可能/现实加载到DOM对象中?

如果我理解正确,您可以将HTML字符串附加到文档的主体上 document.body.innerHTML="string" - JCOC611
3个回答

1

我接受JonDavidJohn的答案,因为它对解决我的问题有用,但也包括这个额外的答案,以供将来可能查看此内容的其他人参考。

似乎虽然Javascript允许将HTML字符串加载到DOM元素中,但DOM不是核心ECMAScript的一部分,因此在Rhino下运行的脚本无法使用。

值得一提的是,Rhino 1.6中实现的一个很好的替代方案是E4X。虽然它不是DOM实现,但它确实提供了类似概念的功能。


1

如果文档是XHTML格式,你可以使用任何XML解析器来解析它。E4X可能很好地完成这项工作,Java内置的XML解析接口也可以。

env.js库旨在在Rhino下模拟浏览器环境,但我认为你的文档也需要遵守XHTML标准:

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

http://www.envjs.com/

如果是HTML,那么情况就比较复杂了,因为浏览器在解析标记时被设计成非常宽容。这里有一个Java中HTML解析器的列表:

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

这不是一个容易解决的问题。人们甚至通过JNI将Mozilla Gecko引擎嵌入Java以利用其解析能力。

我建议您研究以下纯Java项目:

http://lobobrowser.org/cobra.jsp

Lobo 项目的目标是开发一个纯 Java 的网络浏览器。这是一个非常有趣的项目,其中有很多内容,但我相信你可以像下面链接中描述的那样,在自己的应用程序中轻松地使用独立的解析器。

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


0
如果您有一个包含HTML的变量,您可以将其加载到DOM对象中,例如通过ID。
var mywebpage = '<!DOCTYPE HTML PUB ...//snipped//... </body></html>';

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

element.innerHTML = mywebpage;

那是朝着正确方向迈出的一步。由于我正在使用Rhino,我不确定是否实际上可以访问或可能“创建”DOM对象。我将继续研究这个问题,并在学到更多信息时更新。 - xelco52
好的,只要你有一个 HTML 字符串,它就会加载到你选择的任何 DOM 元素中。 - jondavidjohn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接