打印本文 打印本文 关闭窗口 关闭窗口
ADO数据与XML数据间的转换的类(ASP实现)
作者:武汉SEO闵涛  文章来源:敏韬网  点击数2264  更新时间:2009/4/23 10:50:36  文章录入:mintao  责任编辑:mintao
ncoding   = "gb2312"

End Sub


''''*****************************************************
'''' 注销类
''''*****************************************************
Private Sub Class_Terminate()
  Set m_oXMLDOM = Nothing
  Set m_oXSLDOM = Nothing 
End Sub


''''============================= 数据导出 Begin =============================

''''*****************************************************
'''' 过程: Export(ByRef p_oDbConn)
'''' 描述: 导出数据
'''' 参数: 
''''   p_oDbConn: 数据库连接对象
''''
''''*****************************************************
Public Sub Export(ByRef p_oDbConn)
 Dim nI, nMaxI
 Dim sTableName, sSQL
 Dim sDataXML, sXSLStr
 Dim sXMLStr
 
 If (Not IsArray(m_aSQlData)) Then
  m_nErrCode = m_nErrCode_NotArray
  Exit Sub
 End If

 ON ERROR RESUME NEXT

 Set m_oXSLDOM = Server.CreateObject("Microsoft.XMLDOM")
 Set m_oXMLDOM = Server.CreateObject("Microsoft.XMLDOM")
 
 If Err.Number <>0 Then
  m_nErrCode = m_nErrCode_XMLDOM
  Exit Sub
 End If
 
 sXSLStr   = GetXSL()  

 m_oXMLDOM.async = false 
 m_oXSLDOM.async = false
 m_oXSLDOM.loadxml(sXSLStr)

 

 sDataXML = "<?xml version=''''1.0'''' encoding=''''" & m_sEncoding & "''''?>"
 sDataXML = sDataXML & "<DataBase>"

 nMaxI = Ubound(m_aSQlData, 1)

 For nI=0 To nMaxI

  sTableName = m_aSQlData(nI, 0)

  If (Len(sTableName) > 0) Then

   sSQL  = m_aSQlData(nI, 1)
   sXMLStr  = GetDataXML(sTableName, sSQL, p_oDbConn)
   
   IF (m_nErrCode > m_nErrCode_NotErr) Then
    Exit Sub
   End IF
   

   sDataXML = sDataXML & sXMLStr
  End If  
 
 Next

 sDataXML = sDataXML & "</DataBase>"
 
 IF (m_bIsOutput) Then
  Call ResponseXML(sDataXML)
 End IF
 
 IF (m_bIsSave) Then
  Call SaveDataXML(sDataXML)
 End IF 
 
End Sub


''''*****************************************************
'''' 函数: GetRndFileName()
'''' 描述: 获得随机名称,由当前时间和7位随机数字构成
''''*****************************************************
Private Function GetRndFileName()
 Dim nMax, nMin
 Dim sRnd, sDate

 Randomize

 nMin = 1000000
 nMax = 9999999

 sRnd = Int( ( (nMax - nMin + 1) * Rnd ) + nMin)
 sDate = Replace( Replace( Replace( now(), "-", "") , ":", ""), " ", "")

 GetRndFileName = "_" & sDate & sRnd & ".xml"
 
End Function


''''*****************************************************
'''' 函数: GetXSL()
'''' 描述: 获得XSL文件字符串
''''*****************************************************
Private Function GetXSL()
 Dim sXSLStr

 sXSLStr = ""
 sXSLStr = sXSLStr & "<?xml version=''''1.0'''' encoding=''''" & m_sEncoding & "''''?>"
 sXSLStr = sXSLStr & "<xsl:stylesheet version=''''1.0'''' xmlns:xsl=''''http://www.w3.org/1999/XSL/Transform'''' xmlns:s=''''uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882'''' xmlns:dt=''''uuid:C2F41010-65B3-11d1-A29F-00AA00C14882'''' xmlns:rs=''''urn:schemas-microsoft-com:rowset'''' xmlns:z=''''#RowsetSchema''''>"
 sXSLStr = sXSLStr & "<xsl:output omit-xml-declaration=''''yes''''/>"
 sXSLStr = sXSLStr & "<xsl:template match=''''/''''>"
 sXSLStr = sXSLStr & "<xsl:for-each select=''''/xml/rs:data/z:row''''>"
 sXSLStr = sXSLStr & "<xsl:element name=''''Row''''>"
 sXSLStr = sXSLStr & "<xsl:for-each select=''''@*''''>"
 sXSLStr = sXSLStr & "<xsl:attribute name=''''{name()}''''>"
 sXSLStr = sXSLStr & "<xsl:value-of select=''''.''''/>"
 sXSLStr = sXSLStr & "</xsl:attribute>"
 sXSLStr = sXSLStr & "</xsl:for-each>"
 sXSLStr = sXSLStr & "</xsl:element>"
 sXSLStr = sXSLStr & "</xsl:for-each>"
 sXSLStr = sXSLStr & "</xsl:template>"
 sXSLStr = sXSLStr & "</xsl:stylesheet>"

 GetXSL = sXSLStr 
 
End Function


''''*****************************************************
'''' 函数: GetDataXML(ByRef p_sTableName, ByRef p_sSQL, ByRef p_oDbConn)
'''' 描述: 执行单条SQL,获得数据转换后的XML
'''' 参数: 
''''   1.p_sTableName : 表的名称
''''   2.p_sSQL  : 读取数据的SQl语句
''''   3.p_oDbConn  : 数据库连接对象
''''
''''*****************************************************
Private Function GetDataXML(ByRef p_sTableName, ByRef p_sSQL, ByRef p_oDbConn)
 Dim oRecordset
 Dim sXMLStr, sCleanXML
 Dim nEnsData

 ON ERROR RESUME NEXT

 nEnsData  = 0

 Set oRecordset = p_oDbConn.Execute(p_sSQL)
 If Err.Number <>0 Then
  m_nErrCode = m_nErrCode_ReadData
  Exit Function
 End If

 IF (Not oRecordset.eof) Then
  nEnsData = 1
 End IF
 
 IF (nEnsData = 1) Then
  oRecordset.save m_oXMLDOM, 1
  
  oRecordset.close
  Set oRecordset = Nothing

  sCleanXML = m_oXMLDOM.transformNode(m_oXSLDOM)

  sXMLStr  = "<" & p_sTableName & ">"
  sXMLStr  = sXMLStr & sCleanXML
  sXMLStr  = sXMLStr & "</" & p_sTableName & ">"
 Else
  sXMLStr  = "<" & p_sTableName & "/>"
 End IF
 


 GetDataXML = sXMLStr

End Function


''''*****************************************************
'''' 过程: SaveDataXML(ByRef p_sXMLStr)
'''' 描述: 保存XML格式的字符串到文件
'''' 参数: 
''''   p_sXMLStr : XML格式的字符串
''''*****************************************************
Private Sub SaveDataXML(ByRef p_sXMLStr)
 Dim sFileInfo 

 If (Len(m_sSaveFileName) = 0) Then
  m_sSaveFileName = GetRndFileName()
 End If 
 
 If (Len(m_sSaveFilePath) = 0) Then
  sFileInfo = m_sSaveFileName
 Else
  IF (Right(m_sSaveFilePath,1) = "/")Then
   sFileInfo = m_sSaveFilePath & m_sSaveFileName
  Else   
   sFileInfo = m_sSaveFilePath & "/" & m_sSaveFileName
  End IF  
 End If 

 m_oXMLDOM.loadxml(p_sXMLStr)

 ON ERROR RESUME NEXT

 m_oXMLDOM.save ( Server.MapPath(sFileInfo) )
 If Err.Number <>0 Then
  m_nErrCode = m_nErrCode_Save
  Exit Sub
 End If

End Sub

''''*****************************************************
'''' 过程: ResponseXML(ByRef p_sXMLStr)
'''' 描述: 输出XML格式的字符串到浏览器
'''' 参数: 
''''   p_sXMLStr : XML格式的字符串
''''*****************************************************
Private Sub ResponseXML(ByRef p_sXMLStr)
 Response.CharSet  = m_sEncoding
 Response.ContentType = "text/xml"
 Response.write p_sXMLStr
End Sub


''''============================= 数据导出 End =============================

 

''''============================= 数据导入 Begin =============================

''''*****************************************************
'''' 过程: Import(ByRef p_oDbConn)
'''' 描述: 导入数据
'''' 参数: 
''''   p_oDbConn: 数据库连接对象
''''
''''*****************************************************
Public Sub Import(ByRef p_oDbConn)
 Dim oRootNode

 If (Len(m_sXMLFile) < 1) Then
  m_nErrCode = m_nErrCode_EnsFile
  Exit Sub
 End If

 ON ERROR RESUME NEXT

 Set m_oXMLDOM = Server.CreateObject("Microsoft.XMLDOM")
 
 If Err.Number <>0 Then
  m_nErrCode = m_nErrCode_XMLDOM
  Exit Sub
 End If
 
 m_oXMLDOM.async = false 

 m_oXMLDOM.load( Server.MapPath(m_sXMLFile) )
 If Err.Number <>0 Then
  m_nErrCode = m_nErrCode_EnsFile
  Exit Sub
 End If

 If (Len(m_oXMLDOM.xml) < 1) Then
  m_nErrCode = m_nErrCode_ErrFile
  Exit Sub
 End If

 Set oRootNode = m_oXMLDOM.documentElement
 Set m_oXMLDOM  = Nothing
 
 m_sImportSQL = GetImportSQL(oRootNode)

 Set oRootNode = Nothing

 Call p_oDbConn.Execute(m_sImportSQL)
 If Err.Number <>0 Then
  m_nErrCode = m_nErrCode_WriteData
  Exit Sub
 End If
&

上一页  [1] [2] [3]  下一页

打印本文 打印本文 关闭窗口 关闭窗口