问题:
如何导入用ADODB.Recordset.Save保存的XML文件到新的Recordset?《ADO/DAO/ADO.NET》
我用了上述方法保存了 XML ,但是格式好怪呀:
<xml 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'>
<s:Schema id='RowsetSchema'>
<s:ElementType name='row' content='eltOnly'>
<s:AttributeType name='ID' rs:number='1' rs:maydefer='true' rs:writeunknown='true'>
<s:datatype dt:type='int' dt:maxLength='4' rs:precision='10' rs:fixedlength='true'/>
</s:AttributeType>
<s:AttributeType name='fa' rs:number='2' rs:nullable='true' rs:maydefer='true' rs:writeunknown='true'>
<s:datatype dt:type='string' dt:maxLength='50'/>
</s:AttributeType>
<s:AttributeType name='fb' rs:number='3' rs:nullable='true' rs:maydefer='true' rs:writeunknown='true'>
<s:datatype dt:type='string' dt:maxLength='50'/>
</s:AttributeType>
<s:AttributeType name='fc' rs:number='4' rs:nullable='true' rs:maydefer='true' rs:writeunknown='true'>
<s:datatype dt:type='string' dt:maxLength='50'/>
</s:AttributeType>
<s:AttributeType name='fd' rs:number='5' rs:nullable='true' rs:maydefer='true' rs:writeunknown='true'>
<s:datatype dt:type='string' dt:maxLength='50'/>
</s:AttributeType>
<s:AttributeType name='d' rs:number='6' rs:nullable='true' rs:maydefer='true' rs:writeunknown='true'>
<s:datatype dt:type='dateTime' rs:dbtype='variantdate' dt:maxLength='16' rs:fixedlength='true'/>
</s:AttributeType>
<s:extends type='rs:rowbase'/>
</s:ElementType>
</s:Schema>
<rs:data>
<z:row ID='1' fa='er' fb='werw' fc='r' fd='er' d='2007-01-01T00:00:00'/>
<z:row ID='2' fa='er' fb='werw'/>
<z:row ID='6' fa='er' fb='werw'/>
</rs:data>
</xml>
像这样的 XML 我用 Application.ImportXML 根本无法导入,该如何进行导入?
回答:
ADODB.Recordset.Save 的 XML 的格式比较特别,不是采用常见的标记的方式来标记所有数据,而是使用属性(Attribute)来标记结构后再用属性来标记数据,所以普通的 XML 解析方式是无法读取其数据的。
用以下代码可以实现
'===========================================================
' 过程及函数名: RSSaveToXmlAndCheckAgain
' 版本号 : 1.0
' 说明 : 本函数作用:将某个 RS 的内容 SAVE 到 XML
' 中,并验证一下记录数量
' 引用 : ADO 2.5 以上版本
' 输入参数 : --
' 输出值 : --
' 返回值 : --
' 调用演示 : --
' 最后修改日期: 2006-11-13 22:32:00
' 示例地址 : http://access911.net/?kbid;72FABE1E17DCE6F3
' 作者 : cg1
' 网站 : http://access911.net
' 电子邮件 : [email protected]
'===========================================================
Function RSSaveToXmlAndCheckAgain()
Dim rs As New ADODB.Recordset
Dim strsql As String
strsql = "select * from 表1"
rs.Open strsql, CurrentProject.Connection, 1, 1
k "c:\temp\rs.xml"
rs.Save "c:\temp\rs.xml", adPersistXML
Dim rs1 As New ADODB.Recordset
rs1.CursorLocation = adUseClient
rs1.Open "c:\temp\rs.xml"
Debug.Print rs1.RecordCount
End Function
'===========================================================
' 过程及函数名: k
' 版本号 : 1.0
' 说明 : 本函数作用:如果某个文件存在就删除,不存在
' 就什么也不做
' 引用 : --
' 输入参数 : strPath 文本,文件的路径
' 输出值 : --
' 返回值 : --
' 调用演示 : --
' 最后修改日期: 2006-11-13 22:32:00
' 示例地址 : http://access911.net/?kbid;72FABE1E17DCE6F3
' 作者 : cg1
' 网站 : http://access911.net
' 电子邮件 : [email protected]
'===========================================================
Function k(ByVal strPath)
On Error Resume Next
Kill strPath
End Function
'===========================================================
' 过程及函数名: ImportFromXML
' 版本号 : 1.0
' 说明 : 本函数作用:根据特定(RS.SAVE)的XML导入数据
' 到现有的表中
' 引用 : --
' 输入参数 : --
' 输出值 : --
' 返回值 : --
' 调用演示 : --
' 最后修改日期: 2006-11-13 22:32:00
' 示例地址 : http://access911.net/?kbid;72FABE1E17DCE6F3
' 作者 : cg1
' 网站 : http://access911.net
' 电子邮件 : [email protected]
'===========================================================
Function ImportFromXML()
'注意,这的 表1 已经存在了,如果表1不存在,则需要用 XML DOM 分析 XML 以后建立对应的表和字段才能导入
Dim rs As New ADODB.Recordset
Dim strsql As String
strsql = "select * from 表1"
rs.Open strsql, CurrentProject.Connection, 2, 3
Dim rs1 As New ADODB.Recordset
rs1.CursorLocation = adUseClient
rs1.Open "c:\temp\rs.xml"
Debug.Print rs1.RecordCount
Do Until rs1.EOF
'具体导入代码,添加到现有表
'....
rs.AddNew
rs("fa") = rs1("fa")
'注意,这里不能包括主键 ID 字段,否则会因为重复而出错
rs("fb") = rs1("fb")
rs.Update
rs1.MoveNext
Loop
rs1.Close
rs.Close
End Function
本站文章旨在为该问题提供解决思路及关键性代码,并不能完成应该由网友自己完成的所有工作,请网友在仔细看文章并理解思路的基础上举一反三、灵活运用。
vb 读取记录集文件
猜你喜欢
转载自blog.csdn.net/qq_36576377/article/details/86566976
今日推荐
周排行