使用 Asp(vbs) 来读取 XML 数据岛 来制作网站菜单
总的来说还得使用到Microsoft的ActiveX
创建XML对象:createObject("Microsoft.XMLDOM")
读取节点:selectSingleNode("nodename") //nodename为节点名。
读取属性:attributes.getNamedItem("attribute") //attribute为节点中所具有的属性名。
加载Xml文档:Load(Server.MapPath("XMLPath.xml"))
我写成了一个类,代码如下:
1
'■■■■■■■■■■■■■■■■■■■■■■■■
2
' ■
3
' 读取XML数据岛 ■
4
' ■
5
'■■■■■■■■■■■■■■■ By Maple ■■■
6
Class XMLReader
7
Private xmlDoc
8
9
'类初始化,创建XMLDOM对象,构造函数
10
private Sub Class_initialize()
11
'创建XMLDOM对象
12
Set xmlDoc = Server.CreateObject("Microsoft.XMLDOM")
13
'设置是否可以异步读取
14
xmlDoc.async = False
15
End Sub
16
17
'设置XML物理路径
18
Public Sub LoadXML(ByVal XPath)
19
xmlDoc.Load(Server.MapPath(XPath))
20
End Sub
21
22
'在类终止时候释放XMLDOM对象
23
Public Sub Class_Terminate()
24
Set xmlDoc = Nothing
25
End Sub
26
27
'选择单个节点
28
Public Function SelectSingleNode(ByVal NodeName)
29
Set SelectSingleNode = Doc.SelectSingleNode(NodeName)
30
End Function
31
32
'取得节点下子节点的总数
33
Public Function getNodeCount(Node)
34
getNodeCount = Node.Length
35
End Function
36
37
38
'〓〓〓〓〓〓〓〓〓〓 过程作用解释 〓〓〓〓〓〓〓〓〓〓
39
'〓 〓
40
'〓 读取网页菜单列表 〓
41
'〓 〓
42
'〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓 By Maple 〓〓〓
43
Public Sub getWebMenu(xPath)
44
'调用Load传入XML物理路径
45
LoadXML(xPath)
46
set root = xmlDoc.documentElement
47
set nodeList = root.childNodes.item(0).childNodes
48
NodeCount = getNodeCount(nodeList)
49
50
For i = 1 to nodeCount
51
'取得下一个节点的值
52
set node = nodeList.nextNode()
53
' set cost = node.attributes.getNamedItem("cost")
54
Response.Write("<a href=""")
55
Response.Write(Node.SelectSingleNode("URL").Text)
56
Response.Write(""">")
57
'取得单独的一个节点(Name)的文本
58
Response.Write(node.SelectSingleNode("Name").Text)
59
60
'判断是否为最后一条记录,设置界面所用
61
If nodeCount - i <> 0 Then
62
Response.Write("</a> |") & vbcrlf
63
Else
64
Response.Write("</a>") & vbcrlf
65
End If
66
67
Next
68
End Sub
69
70
Public Function SelectNodes(ByVal XPath)
71
Set SelectNodes = Xml.SelectNodes(XPath)
72
End Function
73
End Class
'■■■■■■■■■■■■■■■■■■■■■■■■2
' ■3
' 读取XML数据岛 ■4
' ■5
'■■■■■■■■■■■■■■■ By Maple ■■■6
Class XMLReader7
Private xmlDoc8

9
'类初始化,创建XMLDOM对象,构造函数10
private Sub Class_initialize()11
'创建XMLDOM对象12
Set xmlDoc = Server.CreateObject("Microsoft.XMLDOM")13
'设置是否可以异步读取14
xmlDoc.async = False15
End Sub16
17
'设置XML物理路径18
Public Sub LoadXML(ByVal XPath)19
xmlDoc.Load(Server.MapPath(XPath)) 20
End Sub21
22
'在类终止时候释放XMLDOM对象23
Public Sub Class_Terminate()24
Set xmlDoc = Nothing25
End Sub26
27
'选择单个节点28
Public Function SelectSingleNode(ByVal NodeName)29
Set SelectSingleNode = Doc.SelectSingleNode(NodeName)30
End Function31
32
'取得节点下子节点的总数33
Public Function getNodeCount(Node)34
getNodeCount = Node.Length35
End Function36

37

38
'〓〓〓〓〓〓〓〓〓〓 过程作用解释 〓〓〓〓〓〓〓〓〓〓39
'〓 〓40
'〓 读取网页菜单列表 〓41
'〓 〓42
'〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓 By Maple 〓〓〓43
Public Sub getWebMenu(xPath)44
'调用Load传入XML物理路径45
LoadXML(xPath)46
set root = xmlDoc.documentElement47
set nodeList = root.childNodes.item(0).childNodes48
NodeCount = getNodeCount(nodeList)49
50
For i = 1 to nodeCount 51
'取得下一个节点的值52
set node = nodeList.nextNode()53
' set cost = node.attributes.getNamedItem("cost")54
Response.Write("<a href=""")55
Response.Write(Node.SelectSingleNode("URL").Text)56
Response.Write(""">")57
'取得单独的一个节点(Name)的文本58
Response.Write(node.SelectSingleNode("Name").Text)59
60
'判断是否为最后一条记录,设置界面所用61
If nodeCount - i <> 0 Then62
Response.Write("</a> |") & vbcrlf63
Else64
Response.Write("</a>") & vbcrlf65
End If66
67
Next68
End Sub69
70
Public Function SelectNodes(ByVal XPath)71
Set SelectNodes = Xml.SelectNodes(XPath)72
End Function73
End Class
XML文件:
1
<?xml version="1.0" encoding="UTF-8"?>
2
<Bluesky>
3
4
<MentList>
5
<Link ID="1">
6
<Name>首页</Name>
7
<URL>/</URL>
8
</Link>
9
<Link ID="2">
10
<Name>信息查询</Name>
11
<URL>?Class=Service</URL>
12
</Link>
13
<Link ID="3">
14
<Name>文章中心</Name>
15
<URL>?Class=Article</URL>
16
</Link>
17
<Link ID="4">
18
<Name>网页特效</Name>
19
<URL>?Class=JScript</URL>
20
</Link>
21
<Link ID="5">
22
<Name>网站收藏夹</Name>
23
<URL>?Class=Favorite</URL>
24
</Link>
25
<Link ID="6">
26
<Name>用户讨论区</Name>
27
<URL>?Class=GuestBook</URL>
28
</Link>
29
</MentList>
30
31
<PageSize>
32
<Article>20</Article>
33
<JScript>20</JScript>
34
<GuestBook>15</GuestBook>
35
</PageSize>
36
37
</Bluesky>
<?xml version="1.0" encoding="UTF-8"?>2
<Bluesky>3

4
<MentList>5
<Link ID="1">6
<Name>首页</Name>7
<URL>/</URL>8
</Link>9
<Link ID="2">10
<Name>信息查询</Name>11
<URL>?Class=Service</URL>12
</Link>13
<Link ID="3">14
<Name>文章中心</Name>15
<URL>?Class=Article</URL>16
</Link>17
<Link ID="4">18
<Name>网页特效</Name>19
<URL>?Class=JScript</URL>20
</Link>21
<Link ID="5">22
<Name>网站收藏夹</Name>23
<URL>?Class=Favorite</URL>24
</Link>25
<Link ID="6">26
<Name>用户讨论区</Name>27
<URL>?Class=GuestBook</URL>28
</Link>29
</MentList>30
31
<PageSize>32
<Article>20</Article>33
<JScript>20</JScript>34
<GuestBook>15</GuestBook>35
</PageSize>36
37
</Bluesky>在使用时只需要实例化该类,便可以使用。
set objDoc = new xmlReader
objDoc.getWebMenu("XML路径")
这样就可以调用该方法并显示网站的菜单页面了
因本人水平有限,如果你有更好的方法不妨交流和改正下,让偶也学习学习先。。
==================================================================
以下代码是在百度问到的,方法有点不一样,吸取了好的地方!!
1
'// 首先定义和创建XML对象
2
Dim oXML,oXMLRoot,oXMLItems,oXMLLinks,oXMLItem,iLength,i
3
4
Set oXML = CreateObject("Microsoft.XMLDOM") '// 或 MSXML2.DOMDocument
5
6
'// 然后加载XML文档
7
oXML.load "XML文件地址" '// 或:oXML.loadXML "XML内容"
8
9
'// 内容加载完成后,现在来加载它的节点信息
10
'// 获取XML所有节点
11
12
Set oXMLRoot = oXML.documentElement
13
'// 获取节点
14
Set oXMLItems = oXMLRoot.selectNodes("MentList")
15
16
'// 此时oXMLItems 变量中已经包含了所有MentList节点的内容。
17
'// 如果要获取它下面的 Link 节点的话,用以下语句
18
'// 获取节点,设 MentList 节点只有一个,那么0即是它的内容
19
oXMLLinks = oXMLItems(0).selectNodes("Link")
20
'// 获取节点长度(个数)
21
iLength = oXMLLinks.length - 1
22
23
For i = 0 To iLength
24
Set oXMLItem = oXMLLinks.item(i)
25
'// 用 getAttribute 方法来获取它的属性值
26
Response.write oXMLItem.getAttribute("ID")
27
'// 用 selectSingleNode 方法来获取它的节点值
28
Response.write oXMLItem.selectSingleNode("Name").text
29
Response.write oXMLItem.selectSingleNode("URL").text
30
Next
31
'// 释放XML对象
32
Set oXMLItem = Nothing
33
Set oXMLLinks = Nothing
34
Set oXMLItems = Nothing
35
Set oXMLRoot = Nothing
36
Set oXML = Nothing
'// 首先定义和创建XML对象 2
Dim oXML,oXMLRoot,oXMLItems,oXMLLinks,oXMLItem,iLength,i 3

4
Set oXML = CreateObject("Microsoft.XMLDOM") '// 或 MSXML2.DOMDocument 5

6
'// 然后加载XML文档 7
oXML.load "XML文件地址" '// 或:oXML.loadXML "XML内容" 8

9
'// 内容加载完成后,现在来加载它的节点信息 10
'// 获取XML所有节点 11

12
Set oXMLRoot = oXML.documentElement 13
'// 获取节点 14
Set oXMLItems = oXMLRoot.selectNodes("MentList") 15

16
'// 此时oXMLItems 变量中已经包含了所有MentList节点的内容。 17
'// 如果要获取它下面的 Link 节点的话,用以下语句 18
'// 获取节点,设 MentList 节点只有一个,那么0即是它的内容 19
oXMLLinks = oXMLItems(0).selectNodes("Link") 20
'// 获取节点长度(个数) 21
iLength = oXMLLinks.length - 1 22

23
For i = 0 To iLength 24
Set oXMLItem = oXMLLinks.item(i) 25
'// 用 getAttribute 方法来获取它的属性值 26
Response.write oXMLItem.getAttribute("ID") 27
'// 用 selectSingleNode 方法来获取它的节点值 28
Response.write oXMLItem.selectSingleNode("Name").text 29
Response.write oXMLItem.selectSingleNode("URL").text 30
Next 31
'// 释放XML对象 32
Set oXMLItem = Nothing 33
Set oXMLLinks = Nothing 34
Set oXMLItems = Nothing 35
Set oXMLRoot = Nothing 36
Set oXML = Nothing

浙公网安备 33010602011771号