xmlClass.asp 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. <%
  2. Class XmlManage
  3. ' xml 对象实例
  4. Public xmlDoc
  5. '*************************************************
  6. ' 类的初始化
  7. Private Sub Class_Initialize
  8. set xmlDoc = Server.CreateObject("Msxml2.DOMDocument")
  9. xmlDoc.async = False
  10. End Sub
  11. '*************************************************
  12. ' 类的析构
  13. Private Sub Class_Terminate
  14. Set xmlDoc = Nothing
  15. End Sub
  16. '*************************************************
  17. ' 加载XML
  18. ' oLoad :
  19. ' iType : 要加载的类型.
  20. ' 0,说明oLoad为空,从Request中读取数据;
  21. ' 1,说明oLoad为字符串,直接做为XML格式字符串读取即可;
  22. ' 2,说明oLoad为XML文件路径,需要得到绝对路径后读取;
  23. ' 3,说明oLoad为空,由本程序构造默认的XML格式;
  24. Public Function LoadXml(ByVal oLoad, ByVal iType)
  25. dim bResult
  26. bResult = False
  27. Select Case iType
  28. Case 0
  29. ' 从Request中读取数据
  30. xmlDoc.load(Request)
  31. Case 1
  32. ' 直接做为XML格式字符串读取
  33. xmlDoc.loadXML(oLoad)
  34. Case 2
  35. ' 得到绝对路径后读取
  36. xmlDoc.load(GetAbsolutePath(oLoad))
  37. Case Else
  38. ' oLoad为空,由本程序构造默认的XML格式
  39. dim sXml
  40. sXml = ""
  41. sXml = sXml & "<FeedbackInfo>"
  42. sXml = sXml & "<SubList></SubList>"
  43. sXml = sXml & "</FeedbackInfo>"
  44. xmlDoc.loadXML(sXml)
  45. End Select
  46. bResult = True
  47. LoadXml = bResult
  48. End Function
  49. '*************************************************
  50. ' 设置xmlDoc中节点的值(没有重名节点的情况)
  51. Public Function SetSingleNodeText(ByVal sNodeName, ByVal sNodeText)
  52. dim bResult
  53. bResult = False
  54. xmlDoc.selectSingleNode(ReturnSelectName(sNodeName)).text = sNodeText
  55. bResult = True
  56. SetSingleNodeText = bResult
  57. End Function
  58. '*************************************************
  59. ' 设置xmlDoc中节点的值(同名节点有多个的情况)
  60. Public Function SetNodeTextInNodes(ByVal sNodeName, ByVal sNodeText, ByVal iIndex)
  61. dim bResult
  62. bResult = False
  63. dim nNodeList
  64. set nNodeList = xmlDoc.selectNodes(ReturnSelectName(sNodeName))
  65. if iIndex >= 0 and iIndex < nNodeList.length then
  66. nNodeList(iIndex).text = sNodeText
  67. end if
  68. set nNodeList = nothing
  69. bResult = True
  70. SetNodeTextInNodes = bResult
  71. End Function
  72. '*************************************************
  73. ' 返回节点(没有重名节点的情况)
  74. Public Function GetSingleNode(ByVal sNodeName)
  75. set GetSingleNode = xmlDoc.selectSingleNode(ReturnSelectName(sNodeName))
  76. End Function
  77. '*************************************************
  78. ' 根据索引返回节点(同名节点有多个的情况)
  79. Public Function GetNodeByIndex(ByVal sNodeName, ByVal iIndex)
  80. dim nNodeList
  81. set nNodeList = xmlDoc.selectNodes(ReturnSelectName(sNodeName))
  82. if iIndex >= 0 and iIndex < nNodeList.length then
  83. set GetNodeByIndex = nNodeList(iIndex)
  84. end if
  85. set nNodeList = nothing
  86. End Function
  87. '*************************************************
  88. ' 添加节点
  89. ' sParentNode : 父节点
  90. ' sChildNode : 子节点
  91. ' sNodeText : 节点文本
  92. Public Function AddNode(ByVal sParentNode,ByVal sChildNode,ByVal sNodeText)
  93. dim bResult
  94. bResult = False
  95. set child = xmlDoc.createElement(sChildNode)
  96. if Len(sNodeText) >= 0 then
  97. child.text = sNodeText
  98. end if
  99. ' 用=""判断比较好,还是用IsNull判断比较好,以后可以测试一下
  100. if sParentNode = "" then
  101. xmlDoc.firstChild.appendchild(child)
  102. else
  103. xmlDoc.selectSingleNode(ReturnSelectName(sParentNode)).appendchild child
  104. end if
  105. set child = nothing
  106. bResult = True
  107. AddNode = bResult
  108. End Function
  109. '*************************************************
  110. ' 添加节点
  111. ' sParentNode : 父节点
  112. ' sChildNode : 子节点
  113. ' sNodeText : 节点文本
  114. ' iIndex : 节点索引,即,如果名为sParentNode的父节点有多个,则把子节点添加到索引为iIndex的上面
  115. Public Function AddNodeByIndex(ByVal sParentNode,ByVal sChildNode,ByVal sNodeText, ByVal iIndex)
  116. dim bResult
  117. bResult = False
  118. set child = xmlDoc.createElement(sChildNode)
  119. if Len(sNodeText) >= 0 then
  120. child.text = sNodeText
  121. end if
  122. ' 用=""判断比较好,还是用IsNull判断比较好,以后可以测试一下
  123. if sParentNode = "" then
  124. xmlDoc.firstChild.appendchild(child)
  125. else
  126. if xmlDoc.selectNodes(ReturnSelectName(sParentNode)).length > 1 then
  127. if iIndex >= 0 and iIndex < xmlDoc.selectNodes(ReturnSelectName(sParentNode)).length then
  128. xmlDoc.selectNodes(ReturnSelectName(sParentNode))(iIndex).appendchild child
  129. else
  130. xmlDoc.selectSingleNode(ReturnSelectName(sParentNode)).appendchild child
  131. end if
  132. else
  133. xmlDoc.selectSingleNode(ReturnSelectName(sParentNode)).appendchild child
  134. end if
  135. end if
  136. set child = nothing
  137. bResult = True
  138. AddNodeByIndex = bResult
  139. End Function
  140. '*************************************************
  141. ' 返回节点的子节点数
  142. Public Function GetChildrenNumOfNode(ByVal sParentNode)
  143. dim iResult
  144. iResult = 0
  145. iResult = xmlDoc.selectSingleNode(ReturnSelectName(sParentNode)).childNodes.length
  146. GetChildrenNumOfNode = iResult
  147. End Function
  148. '*************************************************
  149. ' 保存成文件
  150. ' sFileName : 文件名,相对路径
  151. Public Function SaveAsFile(ByVal sFileName)
  152. dim bResult
  153. bResult = False
  154. xmlDoc.Save(GetAbsolutePath(sFileName))
  155. bResult = True
  156. SaveAsFile = bResult
  157. End Function
  158. '*************************************************
  159. ' 添加头
  160. Public Function AddHead()
  161. dim bResult
  162. bResult = False
  163. dim oPI
  164. Set oPI = xmlDoc.createProcessingInstruction("xml", "version=""1.0"" encoding=""utf-8""")
  165. xmlDoc.insertBefore oPI,xmlDoc.childNodes(0)
  166. Set oPI = nothing
  167. bResult = True
  168. AddHead = bResult
  169. end Function
  170. '*************************************************
  171. ' 使用selectSingleNode等方法时,为后面的参数添加//
  172. Private Function ReturnSelectName(ByVal sNodeName)
  173. ReturnSelectName = "//" & sNodeName
  174. End Function
  175. '*************************************************
  176. ' 得到文件的绝对路径
  177. Private Function GetAbsolutePath(sFileName)
  178. GetAbsolutePath = Server.MapPath(sFileName)
  179. End Function
  180. End Class
  181. %>