因朋友急需,写的匆忙,欢迎反馈BUG 程序特点:商品属性可以任意多,属性名称完全自定义,脱离数据库操作,超时或关闭网页自动释放资源. <% '购物车类(Session+Xml版) 'Author:Zero QQ93133 '2008-9-4 Class Cart Private cartId,pAttr,pAttrv,productNode,i Public XmlDom,Encoding Private Sub Class_Initialize() On Error Resume Next Session.Timeout=100 Encoding="gbk" cartId="Cart"&Session.SessionID If Not IsObject(Session(cartId)) Or Session(cartId) Is Nothing Then GetXmlDom XmlDom.loadXML "<?xml version=""1.0"" encoding="""&Encoding&""" ?><order />" Set Session(cartId)=XmlDom.documentElement End If End Sub Private Sub Class_Terminate() On Error Resume Next Set productNode=Nothing Set XmlDom=Nothing End Sub Private Sub GetXmlDom() Set XmlDom=CreateObject("Msxml2.FreeThreadedDOMDocument.3.0") End Sub '设置商品属性 Public Property Let Attr(byval pa,byval pav) '两个参数必须为对应的数组 If Not (IsArray(pa) Or IsArray(pav)) Then Response.Write "商品属性错误":Exit Property pAttr=pa pAttrv=pav End Property '增加到购物车 Public Function Add(byval idname,byval idval) On Error Resume Next Dim Result Set productNode=Session(cartId).SelectSingleNode("//product[@"&idname&"='"&idval&"']") If productNode is Nothing Then '购物车中未找到商品 GetXmlDom Set productNode=Session(cartId).AppendChild(XmlDom.CreateElement("product")) For i=0 To Ubound(pAttr) productNode.setAttribute pAttr(i),pAttrv(i) Next Result=True Else Result=False End If ResetAttr() Add=Result End Function '删除一个商品 Public Sub Del(byval idname,byval idval) On Error Resume Next If Session(cartId).ChildNodes.Length=1 Then Clear Else Session(cartId).RemoveChild(Session(cartId).SelectSingleNode("//product[@"&idname&"='"&idval&"']")) End If End Sub '修改商品属性 Public Sub Modify(byval idname,byval idval) On Error Resume Next Set productNode=Session(cartId).SelectSingleNode("//product[@"&idname&"='"&idval&"']") For i=0 To Ubound(pAttr) productNode.setAttribute pAttr(i),pAttrv(i) Next ResetAttr() End Sub '重置属性设置 Private Sub ResetAttr() patty=null pAttrv=null End Sub '清空购物车 Public Sub Clear() Set Session(cartId)=Nothing End Sub '取得当前操作的节点 Public Function GetNode() Set GetNode=productNode End Function '获取购物车对象,以便在类之外操作数据,返回XML对象,可以直接用本类中XmlDom操作 Public Function GetCart() Set GetCart=Session(cartId) End Function End Class '说明:类内没有数据验证,请把验证数据过程放到对购物车操作之前 '调用方法 Set myCart=New Cart '初始化购物车对象 myCart.Encoding="gbk" '设置编码,默认为gbk '增加一个商品,并自定义增加属性,注意属性名区分大小写 myCart.Attr(array("id","productname","price","num"))=array(1234,"测试商品","300",1) Result=myCart.Add("id",1234) '一个唯一性标识,用来判断是否已经存在商品 If Result Then '新加入 Else '重复加入,数量+1 Set Node=myCart.GetNode() Node.setAttribute "num",Node.GetAttributeNode("num").value+1 Set Node=Nothing End If '修改一个商品 'myCart.Attr(array("num"))=array(10) 'myCart.Modify "id",1234 '被修改的商品标识 '删除一个商品 'myCart.Del "id",1234 '被删除的商品标识 '清空购物车 'myCart.Clear() '输出商品列表,直接使用XmlDom的方法 On Error Resume Next Set ProductList=myCart.GetCart() If ProductList.hasChildNodes Then For i=0 To ProductList.ChildNodes.Length-1 '循环输出购物车内的商品 Response.Write "商品编号:"& ProductList.ChildNodes(i).GetAttributeNode("id").value&" " Response.Write "商品名称:"& ProductList.ChildNodes(i).GetAttributeNode("productname").value&" " Response.Write "商品价格:"& ProductList.ChildNodes(i).GetAttributeNode("price").value&" " Response.Write "商品数量:"& ProductList.ChildNodes(i).GetAttributeNode("num").value&" " Response.Write "<hr />" Next Else Response.Write"购物车是空的" End If Set ProductList=Nothing Set myCart=Nothing %>