使用 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>&nbsp;|"& 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>

在使用时只需要实例化该类,便可以使用。

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 
posted @ 2006-09-02 00:26  PHPFISH  阅读(1760)  评论(0编辑  收藏  举报