<% Class XmlManage ' xml 对象实例 Public xmlDoc '************************************************* ' 类的初始化 Private Sub Class_Initialize set xmlDoc = Server.CreateObject("Msxml2.DOMDocument") xmlDoc.async = False End Sub '************************************************* ' 类的析构 Private Sub Class_Terminate Set xmlDoc = Nothing End Sub '************************************************* ' 加载XML ' oLoad : ' iType : 要加载的类型. ' 0,说明oLoad为空,从Request中读取数据; ' 1,说明oLoad为字符串,直接做为XML格式字符串读取即可; ' 2,说明oLoad为XML文件路径,需要得到绝对路径后读取; ' 3,说明oLoad为空,由本程序构造默认的XML格式; Public Function LoadXml(ByVal oLoad, ByVal iType) dim bResult bResult = False Select Case iType Case 0 ' 从Request中读取数据 xmlDoc.load(Request) Case 1 ' 直接做为XML格式字符串读取 xmlDoc.loadXML(oLoad) Case 2 ' 得到绝对路径后读取 xmlDoc.load(GetAbsolutePath(oLoad)) Case Else ' oLoad为空,由本程序构造默认的XML格式 dim sXml sXml = "" sXml = sXml & "" sXml = sXml & "" sXml = sXml & "" xmlDoc.loadXML(sXml) End Select bResult = True LoadXml = bResult End Function '************************************************* ' 设置xmlDoc中节点的值(没有重名节点的情况) Public Function SetSingleNodeText(ByVal sNodeName, ByVal sNodeText) dim bResult bResult = False xmlDoc.selectSingleNode(ReturnSelectName(sNodeName)).text = sNodeText bResult = True SetSingleNodeText = bResult End Function '************************************************* ' 设置xmlDoc中节点的值(同名节点有多个的情况) Public Function SetNodeTextInNodes(ByVal sNodeName, ByVal sNodeText, ByVal iIndex) dim bResult bResult = False dim nNodeList set nNodeList = xmlDoc.selectNodes(ReturnSelectName(sNodeName)) if iIndex >= 0 and iIndex < nNodeList.length then nNodeList(iIndex).text = sNodeText end if set nNodeList = nothing bResult = True SetNodeTextInNodes = bResult End Function '************************************************* ' 返回节点(没有重名节点的情况) Public Function GetSingleNode(ByVal sNodeName) set GetSingleNode = xmlDoc.selectSingleNode(ReturnSelectName(sNodeName)) End Function '************************************************* ' 根据索引返回节点(同名节点有多个的情况) Public Function GetNodeByIndex(ByVal sNodeName, ByVal iIndex) dim nNodeList set nNodeList = xmlDoc.selectNodes(ReturnSelectName(sNodeName)) if iIndex >= 0 and iIndex < nNodeList.length then set GetNodeByIndex = nNodeList(iIndex) end if set nNodeList = nothing End Function '************************************************* ' 添加节点 ' sParentNode : 父节点 ' sChildNode : 子节点 ' sNodeText : 节点文本 Public Function AddNode(ByVal sParentNode,ByVal sChildNode,ByVal sNodeText) dim bResult bResult = False set child = xmlDoc.createElement(sChildNode) if Len(sNodeText) >= 0 then child.text = sNodeText end if ' 用=""判断比较好,还是用IsNull判断比较好,以后可以测试一下 if sParentNode = "" then xmlDoc.firstChild.appendchild(child) else xmlDoc.selectSingleNode(ReturnSelectName(sParentNode)).appendchild child end if set child = nothing bResult = True AddNode = bResult End Function '************************************************* ' 添加节点 ' sParentNode : 父节点 ' sChildNode : 子节点 ' sNodeText : 节点文本 ' iIndex : 节点索引,即,如果名为sParentNode的父节点有多个,则把子节点添加到索引为iIndex的上面 Public Function AddNodeByIndex(ByVal sParentNode,ByVal sChildNode,ByVal sNodeText, ByVal iIndex) dim bResult bResult = False set child = xmlDoc.createElement(sChildNode) if Len(sNodeText) >= 0 then child.text = sNodeText end if ' 用=""判断比较好,还是用IsNull判断比较好,以后可以测试一下 if sParentNode = "" then xmlDoc.firstChild.appendchild(child) else if xmlDoc.selectNodes(ReturnSelectName(sParentNode)).length > 1 then if iIndex >= 0 and iIndex < xmlDoc.selectNodes(ReturnSelectName(sParentNode)).length then xmlDoc.selectNodes(ReturnSelectName(sParentNode))(iIndex).appendchild child else xmlDoc.selectSingleNode(ReturnSelectName(sParentNode)).appendchild child end if else xmlDoc.selectSingleNode(ReturnSelectName(sParentNode)).appendchild child end if end if set child = nothing bResult = True AddNodeByIndex = bResult End Function '************************************************* ' 返回节点的子节点数 Public Function GetChildrenNumOfNode(ByVal sParentNode) dim iResult iResult = 0 iResult = xmlDoc.selectSingleNode(ReturnSelectName(sParentNode)).childNodes.length GetChildrenNumOfNode = iResult End Function '************************************************* ' 保存成文件 ' sFileName : 文件名,相对路径 Public Function SaveAsFile(ByVal sFileName) dim bResult bResult = False xmlDoc.Save(GetAbsolutePath(sFileName)) bResult = True SaveAsFile = bResult End Function '************************************************* ' 添加头 Public Function AddHead() dim bResult bResult = False dim oPI Set oPI = xmlDoc.createProcessingInstruction("xml", "version=""1.0"" encoding=""utf-8""") xmlDoc.insertBefore oPI,xmlDoc.childNodes(0) Set oPI = nothing bResult = True AddHead = bResult end Function '************************************************* ' 使用selectSingleNode等方法时,为后面的参数添加// Private Function ReturnSelectName(ByVal sNodeName) ReturnSelectName = "//" & sNodeName End Function '************************************************* ' 得到文件的绝对路径 Private Function GetAbsolutePath(sFileName) GetAbsolutePath = Server.MapPath(sFileName) End Function End Class %>