本帖最后由 liu-aguang 于 2016-10-20 09:38 编辑
HTML文档解析
HTML文档被转化为HTML DOM后,所有的元素都被定义为了对象.我们可以应用这些对象的属性或方法访问自己需要的内容.
Document对象
Document对象就是指整个HTML文档对象, 在节点树处于顶端.它的一些方法与属性可以帮助我们访问(锁定)一个具体的元素.
1. 在VBE中声明Document有两种方法:
前期引用:(需要在VBE"工具"-"引用"-Microsoft HTML Object Library)
Dim oDom As New HTMLDocument
该语句声明一个变量oDom为Document对象.
后期引用:
Set oDom = CreateObject("HTMLFIlE")
在实践中发现前期引用与后期引用有一定的差别:
如前期引用,则不能用Write方法把网页写入;而后期引用不能识别Class(类)
2.网页文本加载, 加载有两种方式, 例:
Sub a()
Set oDom = CreateObject("htmlfile")
oDom.body.innerHTML = "
这是一个段落
"End Sub
Sub b()
Set oDom = CreateObject("HTMLFIlE")
oDom.write "
这是一个段落
"End Sub
讨论:
(1)过程a是把网页代码写入oDom的Body标签内.如果写入的网页有
,它会忽略.(2)过程b会把整个网页写入oDom中(包括
,如果有的话).(3)两种加载方式最大不同点是:用Write方式加载,它会同时初始化或执行网页中的动态代码.而过程a则不会.
(4)多数情况下,我们采用过程a方式加载网页.
3. Document对象访问元素的方法:
(1)根据元素的ID,Name,TagName,Calss属性访问元素.
语法:
Document.getElementById("id名") 返回带有指定 ID 的元素。
Document.getElementsByName("元素name值") VBA中不支持
Document.getElementsByTagName("元素标签名") 返回包含带有指定标签名称的所有元素的节点列表(集合/节点数组)。
Document.getElementsByCalssName("元素Class名") 返回包含带有指定类名的所有元素的节点列表。'必须前期引用
(2)根据Document集合对象访问元素(过时方式,都可以用上面方法替代).
Document.all(i) '根据标签在网页中序号访问该元素.
Document.all(name) '根据标签的name属性访问元素,如果出现多个相同名字,则结果为数组;
Document.all.tags(tagName) '根据标签名来访问元素,也得到一个数组结果.
例 3.1 根据ID名访问元素内容
Sub getid()
Set oDom = CreateObject("htmlfile")
oDom.body.innerHTML &