<!DOCTYPE html>
<html>
<head>
<title>test</title>
</head>
<body>
<div>
<ul class="lstbox">
<li class="lst_head"><span class="col_1">姓名</span><span class="col_2">邮箱</span><span class="col_3">生日</span></li>
<li class="lst_row"><span class="col_1">张三</span><span class="col_2"><a href="mailto:zhangsan@web.com" class="email">zhangsan</a></span><span class="col_3">80-5-1</span></li>
<li class="lst_row"><span class="col_1">李四</span><span class="col_2"><a href="mailto:lisi@web.com" class="email">lisi</a></span><span class="col_3">85-5-1</span></li>
<li class="lst_row"><span class="col_1">王五</span><span class="col_2"><a href="mailto:wangwu@web.com" class="email">wangwu</a></span><span class="col_3">90-5-1</span></li>
<li class="lst_row"><span class="col_1">赵六</span><span class="col_2"><a href="mailto:zhaoliu@web.com" class="email">zhaoliu</a></span><span class="col_3">95-5-1</span></li>
</ul>
</div>
</body>
</html>
如上面的页面源码,若要提取出姓名,邮箱和生日,可下面这样做
Private Sub Command1_Click()
Dim str As String
Dim li, cd
Dim c_name As String
'遍历元素<li>
For Each li In Dom.Document.getElementsByTagName("li")
'用判断忽略掉列首名称的<li>行
If li.classname = "lst_row" Then
'遍历<li>下的节点
For Each cd In li.childNodes
'判断是否为元素节点
If cd.nodeType <> Then
If cd.classname = "col_2" Then
'如果是第2列的<span>,那么再用firstChild取出第一个元素节点<a>
str = str & cd.firstChild.href & " "
Else
'其他列直接输出文本
str = str & cd.innertext & " "
End If
End If
Next
str = str & vbCrLf
End If
Next
Print str
End Sub
其实就很简单的东西,主要是对HTML不是很熟悉,对node和element有点晕,下面是nodeType值说明
Element | 代表元素 | Element, Text, Comment, ProcessingInstruction, CDATASection, EntityReference | |
Attr | 代表属性 | Text, EntityReference | |
Text | 代表元素或属性中的文本内容。 | None | |
CDATASection | 代表文档中的 CDATA 部分(不会由解析器解析的文本)。 | None | |
EntityReference | 代表实体引用。 | Element, ProcessingInstruction, Comment, Text, CDATASection, EntityReference | |
Entity | 代表实体。 | Element, ProcessingInstruction, Comment, Text, CDATASection, EntityReference | |
ProcessingInstruction | 代表处理指令。 | None | |
Comment | 代表注释。 | None | |
Document | 代表整个文档(DOM 树的根节点)。 | Element, ProcessingInstruction, Comment, DocumentType | |
DocumentType | 向为文档定义的实体提供接口 | None | |
DocumentFragment | 代表轻量级的 Document 对象,能够容纳文档的某个部分 | Element, ProcessingInstruction, Comment, Text, CDATASection, EntityReference | |
Notation | 代表 DTD 中声明的符号。 | None |