使用 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 ■■■
6Class 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
73End Class
2' ■
3' 读取XML数据岛 ■
4' ■
5'■■■■■■■■■■■■■■■ By Maple ■■■
6Class 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
73End 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>
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对象
2Dim oXML,oXMLRoot,oXMLItems,oXMLLinks,oXMLItem,iLength,i
3
4Set oXML = CreateObject("Microsoft.XMLDOM") '// 或 MSXML2.DOMDocument
5
6'// 然后加载XML文档
7oXML.load "XML文件地址" '// 或:oXML.loadXML "XML内容"
8
9'// 内容加载完成后,现在来加载它的节点信息
10'// 获取XML所有节点
11
12Set oXMLRoot = oXML.documentElement
13'// 获取节点
14Set oXMLItems = oXMLRoot.selectNodes("MentList")
15
16'// 此时oXMLItems 变量中已经包含了所有MentList节点的内容。
17'// 如果要获取它下面的 Link 节点的话,用以下语句
18'// 获取节点,设 MentList 节点只有一个,那么0即是它的内容
19oXMLLinks = oXMLItems(0).selectNodes("Link")
20'// 获取节点长度(个数)
21iLength = oXMLLinks.length - 1
22
23For i = 0 To iLength
24Set oXMLItem = oXMLLinks.item(i)
25'// 用 getAttribute 方法来获取它的属性值
26Response.write oXMLItem.getAttribute("ID")
27'// 用 selectSingleNode 方法来获取它的节点值
28Response.write oXMLItem.selectSingleNode("Name").text
29Response.write oXMLItem.selectSingleNode("URL").text
30Next
31'// 释放XML对象
32Set oXMLItem = Nothing
33Set oXMLLinks = Nothing
34Set oXMLItems = Nothing
35Set oXMLRoot = Nothing
36Set oXML = Nothing
2Dim oXML,oXMLRoot,oXMLItems,oXMLLinks,oXMLItem,iLength,i
3
4Set oXML = CreateObject("Microsoft.XMLDOM") '// 或 MSXML2.DOMDocument
5
6'// 然后加载XML文档
7oXML.load "XML文件地址" '// 或:oXML.loadXML "XML内容"
8
9'// 内容加载完成后,现在来加载它的节点信息
10'// 获取XML所有节点
11
12Set oXMLRoot = oXML.documentElement
13'// 获取节点
14Set oXMLItems = oXMLRoot.selectNodes("MentList")
15
16'// 此时oXMLItems 变量中已经包含了所有MentList节点的内容。
17'// 如果要获取它下面的 Link 节点的话,用以下语句
18'// 获取节点,设 MentList 节点只有一个,那么0即是它的内容
19oXMLLinks = oXMLItems(0).selectNodes("Link")
20'// 获取节点长度(个数)
21iLength = oXMLLinks.length - 1
22
23For i = 0 To iLength
24Set oXMLItem = oXMLLinks.item(i)
25'// 用 getAttribute 方法来获取它的属性值
26Response.write oXMLItem.getAttribute("ID")
27'// 用 selectSingleNode 方法来获取它的节点值
28Response.write oXMLItem.selectSingleNode("Name").text
29Response.write oXMLItem.selectSingleNode("URL").text
30Next
31'// 释放XML对象
32Set oXMLItem = Nothing
33Set oXMLLinks = Nothing
34Set oXMLItems = Nothing
35Set oXMLRoot = Nothing
36Set oXML = Nothing