ADO数据与XML数据间的转换的类.docx
《ADO数据与XML数据间的转换的类.docx》由会员分享,可在线阅读,更多相关《ADO数据与XML数据间的转换的类.docx(22页珍藏版)》请在冰点文库上搜索。
![ADO数据与XML数据间的转换的类.docx](https://file1.bingdoc.com/fileroot1/2023-4/29/212c7395-b91b-4259-9ada-a0b6455869b2/212c7395-b91b-4259-9ada-a0b6455869b21.gif)
ADO数据与XML数据间的转换的类
ADO数据与XML数据间的转换的类
当对现有数据库的数据进行分析时,经常需要对某一部分的数据进行分析.此时,使用
1.SQL查询分析器?
但其往往不直观,查找某个关键字又需要重新执行新的SQL.
2.SQLXML模板?
但又不一定有权限建立新的虚拟目录,且某些SQL语句SQLXML模板不支持
数据拆离时也有相似问题。
尤其当不同网络,不同环境,需要重新导入数据,进行分析或拆离,困难尤为明显。
能不能有一种方法,可以将数据脱离于数据库进行分析,需要时再导入到数据库中?
XML是个很好的选择!
ADO本身支持数据到XML的转换,只需要对其格式进行解析,成为自己的XML文件通用格式,就可以进行本地分析
而对通用XML格式进行数据库映射,就可完成数据重新导入数据库的工作.
下面是一个ADO数据(表的基本数据)与XML数据间的相互转换的类(ASP实现),初步完成表数据的导入、导出。
通用表间关系映射(通过XSD描述),考虑之中,希望各位赐教指点,不胜感激.
一个调用类的例子:
example.asp
--#includefile="transformData.asp"-->
<%
DimaSQL(1,1)
DimoXMLData
'======连接数据库过程======
'获得数据库连接对象oDbConn
'======连接数据库过程======
aSQL(0,0)="PubLable"
aSQL(0,1)="Select*fromPubLabelwherecLabelNamelike'%abc%'OrderbynLabelID"
aSQL(1,0)="PubUser"
aSQL(1,1)="Select*fromPubUserwherecUserNamelike'%abc%'OrderbynUserID"
setoXMLData=NewTransformData
CallExport()
'CallImport()
setoXMLData=nothing'//当对象属性有默认值(default())时,可以不用在赋值
SubExport() ' //导出数据
oXMLData.aSQlData =aSQL
'必须 2维SQL语句数组
oXMLData.bIsSave =1
'default
(1) 是否保存为XML文件
oXMLData.bIsOutput =1
'default(0) 是否显示XML数据
oXMLData.sSaveFileName="Data.xml"
'default(当前时间加随机数)如果保存XML数据,XML文件名称
oXMLData.sSaveFilePath=""
'default("") 如果保存XML数据,XML文件路径(相对路径)
oXMLData.sEncoding ="gb2312"
'default("gb2312") XML文件编码类型
oXMLData.Export(oDbConn)
'//导出数据过程
IF(oXMLData.nErrCode<>0)Then 'nErrCode(错误代码)为0,运行成功
Response.WriteoXMLData.GetErrExegesis(oXMLData.nErrCode)
'nErrCode(错误代码),通过方法GetErrExegesis()获得注释
EndIF
EndSub
SubImport() ' //导入数据
oXMLData.sXMLFile ="Data.xml"'必须 数据源XML文件(包含相对路径)
oXMLData.sVacancyCols="nLabelID"'必须 指定某些字段的值可以不导入(屏蔽字段)
'格式 "nID,dDate" (以‘,’分隔字段)
oXMLData.Import(oDbConn)
IF(oXMLData.nErrCode=0)Then
Response.Write"数据导入成功!
"
Else
Response.WriteoXMLData.GetErrExegesis(oXMLData.nErrCode)
EndIF
EndSub
%>
类的代码:
TransformData.asp
<%
ClassTransformData
'*****************************************************
'Copyright(c)2003
'创建人:
moonpiazza
'日 期:
2003.5.21
'描 述:
ADO数据与XML数据间的转换(ASP实现)
'版 本:
1.0
'功 能:
ADO数据(表的基本数据)与XML数据间的相互转换
'待改进:
表间数据的关联性(通用),数据量大时速度问题
'
'版权:
欢迎改进,翻版不究 :
_)
'
'*****************************************************'*****************************************************
'公共方法:
Export,Import,GetErrExegesis
'*****************************************************
'=============================公共变量 End=============================
Privatem_oXMLDOM
Privatem_oXSLDOM
'=============================公共变量Begin=============================
'=============================错误代码定义Begin=============================
Privatem_nErrCode_NotArray
Privatem_nErrCode_XMLDOM
Privatem_nErrCode_ReadData
Privatem_nErrCode_WriteData
Privatem_nErrCode_Save
Privatem_nErrCode_EnsFile
Privatem_nErrCode_ErrFile
'=============================错误代码定义 End=============================
'=============================属性定义Begin=============================
Privatem_aSQlData
Privatem_bIsSave
Privatem_bIsOutput
Privatem_sSaveFileName
Privatem_sSaveFilePath
Privatem_sXMLFile
Privatem_sVacancyCols
Privatem_nErrCode
Privatem_sEncoding
Privatem_sImportSQL
'*****************************************************
'属性:
aSQlData
'状态:
可写
'类型:
2维数组
'描述:
SQL语句数组,1维是表名称,2维是相应SQL语句
'*****************************************************
PublicPropertyLetaSQlData(ByRefp_aSQlData)
m_aSQlData=p_aSQlData
EndProperty'*****************************************************
'属性:
bIsSave
'状态:
可写
'类型:
数字(0,1)default
(1)
'描述:
导出数据时,是否保存为XML文件
'*****************************************************
PublicPropertyLetbIsSave(ByRefp_bIsSave)
m_bIsSave=Cint(p_bIsSave)
EndProperty'*****************************************************
'属性:
bIsOutput
'状态:
可写
'类型:
数字(0,1)default(0)
'描述:
导出数据时,是否显示XML数据
'*****************************************************
PublicPropertyLetbIsOutput(ByRefp_bIsOutput)
m_bIsOutput=Cint(p_bIsOutput)
EndProperty'*****************************************************
'属性:
sSaveFileName
'状态:
可写,可读
'类型:
字符串default(GetRndFileName())
'描述:
导出数据时,如果保存XML数据,XML文件名称
'*****************************************************
PublicPropertyLetsSaveFileName(ByRefp_sSaveFileName)
m_sSaveFileName=p_sSaveFileName
EndProperty
PublicPropertyGetsSaveFileName()
sSaveFileName=m_sSaveFileName
EndProperty'*****************************************************
'属性:
sSaveFilePath
'状态:
可写,可读
'类型:
字符串default("")
'描述:
导出数据时,如果保存XML数据,XML文件路径(相对路径)
'*****************************************************
PublicPropertyLetsSaveFilePath(ByRefp_sSaveFilePath)
m_sSaveFilePath=p_sSaveFilePath
EndProperty
PublicPropertyGetsSaveFilePath()
sSaveFilePath=m_sSaveFilePath
EndProperty'*****************************************************
'属性:
sXMLFile
'状态:
可写
'类型:
字符串
'描述:
导入数据时,数据源XML文件(包含相对路径)
'*****************************************************
PublicPropertyLetsXMLFile(ByRefp_sXMLFile)
m_sXMLFile=p_sXMLFile
EndProperty'*****************************************************
'属性:
sVacancyCols
'状态:
可写
'类型:
字符串default("")
' 格式 "nID,dDate" (以‘,’分隔字段)
'描述:
导入数据时,指定某些字段的值可以不导入(屏蔽字段)
'*****************************************************
PublicPropertyLetsVacancyCols(ByRefp_sVacancyCols)
m_sVacancyCols=","&p_sVacancyCols&","
EndProperty'*****************************************************
'属性:
nErrCode
'状态:
可读
'类型:
数字default(0)
'描述:
错误代码,可通过方法GetErrExegesis(ByRefp_nErrCode)获得注释
'*****************************************************
PublicPropertyGetnErrCode()
nErrCode=m_nErrCode
EndProperty'*****************************************************
'属性:
sEncoding
'状态:
可写
'类型:
字符串default("gb2312")
'描述:
XML文件编码类型
'*****************************************************
PublicPropertyLetsEncoding(ByRefp_sEncoding)
m_sEncoding=p_sEncoding
EndProperty'*****************************************************
'属性:
sImportSQL
'状态:
可读
'类型:
字符串default("gb2312")
'描述:
导入数据时,生成的SQL语句
'*****************************************************
PublicPropertyGetsImportSQL()
sImportSQL=m_sImportSQL
EndProperty
'=============================属性定义End=============================
'*****************************************************
'初始化类
'*****************************************************
PrivateSubClass_Initialize()
Server.ScriptTimeout=1000
m_nErrCode_NotErr=0
m_nErrCode_NotArray=1
m_nErrCode_XMLDOM=2
m_nErrCode_ReadData=3
m_nErrCode_WriteData=4
m_nErrCode_Save =5
m_nErrCode_EnsFile=6
m_nErrCode_ErrFile=7m_bIsSave =1
m_bIsOutput =0
m_sSaveFilePath =""
m_sSaveFileName =""
m_sXMLFile =""
m_sVacancyCols =""
m_nErrCode =m_nErrCode_NotErr
m_sEncoding ="gb2312"
EndSub'*****************************************************
'注销类
'*****************************************************
PrivateSubClass_Terminate()
Setm_oXMLDOM=Nothing
Setm_oXSLDOM=Nothing
EndSub'=============================数据导出Begin=============================
'*****************************************************
'过程:
Export(ByRefp_oDbConn)
'描述:
导出数据
'参数:
' p_oDbConn:
数据库连接对象
'
'*****************************************************
PublicSubExport(ByRefp_oDbConn)
DimnI,nMaxI
DimsTableName,sSQL
DimsDataXML,sXSLStr
DimsXMLStr
If(NotIsArray(m_aSQlData))Then
m_nErrCode=m_nErrCode_NotArray
ExitSub
EndIf
ONERRORRESUMENEXT
Setm_oXSLDOM=Server.CreateObject("Microsoft.XMLDOM")
Setm_oXMLDOM=Server.CreateObject("Microsoft.XMLDOM")
IfErr.Number<>0Then
m_nErrCode=m_nErrCode_XMLDOM
ExitSub
EndIf
sXSLStr =GetXSL()
m_oXMLDOM.async=false
m_oXSLDOM.async=false
m_oXSLDOM.loadxml(sXSLStr)
sDataXML="
xmlversion='1.0'encoding='"&m_sEncoding&"'?
>"
sDataXML=sDataXML&""
nMaxI=Ubound(m_aSQlData,1)
FornI=0TonMaxI
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
ExitSub
EndIF
sDataXML=sDataXML&sXMLStr
EndIf
Next
sDataXML=sDataXML&""
IF(m_bIsOutput)Then
CallResponseXML(sDataXML)
EndIF
IF(m_bIsSave)Then
CallSaveDataXML(sDataXML)
EndIF
EndSub'*****************************************************
'函数:
GetRndFileName()
'描述:
获得随机名称,由当前时间和7位随机数字构成
'*****************************************************
PrivateFunctionGetRndFileName()
DimnMax,nMin
DimsRnd,sDate
Randomize
nMin=1000000
nMax=9999999
sRnd=Int(((nMax-nMin+1)*Rnd)+nMin)
sDate=Replace(Replace(Replace(now(),"-",""),":
",""),"","")
GetRndFileName="_"&sDate&sRnd&".xml"
EndFunction'*****************************************************
'函数:
GetXSL()
'描述:
获得XSL文件字符串
'*****************************************************
PrivateFunctionGetXSL()
DimsXSLStr
sXSLStr=""
sXSLStr=sXSLStr&"
xmlversion='1.0'encoding='"&m_sEncoding&"'?
>"
sXSLStr=sXSLStr&"stylesheetversion='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&"outputomit-xml-declaration='yes'/>"
sXSLStr=sXSLStr&"templatematch='/'>"
sXSLStr=sXSLStr&"for-eachselect='/xml/rs:
data/z:
row'>"
sXSLStr=sXSLStr&"elementname='Row'>"
sXSLStr=sXSLStr&"for-eachselect='@*'>"
sXSLStr=sXSLStr&"attributename='{name()}'>"
sXSLStr=sXSLStr&"value-ofselect='.'/>"
sXSLStr=sXSLStr&"
attribute>"
sXSLStr=sXSLStr&"
for-each>"
sXSLStr=sXSLStr&"
element>"
sXSLStr=sXSLStr&"
for-each>"
sXSLStr=sXSLStr&"
template>"
s