我正在尝试将Access表中的数据输出为XML。
输出看起来像示例A
,所需内容如示例B
。
我目前执行此操作的代码如下面的示例C
如果有人能提供帮助,我们将不胜感激。
示例A:
<inlineData inlineDataId="1">
<date>24 AUG, 2009</date>
<regis>123456</regis>
<Field15>10000</Field15>
<Field17>10000</Field17>
<Field19>0</Field19>
<Field21>0</Field21>
<rego1>123123</rego1>
<rego2>123124</rego2>
<rego3>123125</rego3>
<rego4/>
<rego5/>
</inlineData>
例B:
<inlineData inlineDataId="1">
<date>24 AUG, 2009</date>
<regis>123456</regis>
<Field15>10000</Field15>
<Field17>10000</Field17>
<Field19>0</Field19>
<Field21>0</Field21>
<vehOwned>
<rego1>123123</rego1>
<rego2>123124</rego2>
<rego3>123125</rego3>
<rego4/>
<rego5/>
</vehOwned>
</inlineData>
示例C:
''// next we go through each record in the recordset, these elements are named
''// according to the field name.
''// note Nz(varItem.Value, "-") in the code - null values here can
''// cause problems on occasion...
rs.MoveFirst
While rs.EOF = False
Dim counter
counter = 1
Do While Not rs.EOF
strXML = strXML & _
"<dataSource>" & vbCrLf & _
"<" & strRoot & counter & "'>" & vbCrLf
For Each varItem In rs.Fields
strXML = strXML & " <" & varItem.Name & ">" & _
Trim(Nz(varItem.Value, "")) & "</" & varItem.Name & ">" & vbCrLf
Next varItem
strXML = strXML & "</inlineData>" & "</dataSource>" & vbCrLf
rs.MoveNext
counter = counter + 1
Loop
Wend
答案 0 :(得分:0)
据我所知,你的代码不会在A或B中产生结果,因为它不会像你给出的例子中那样处理空(NULL)字段。
在任何情况下,您都无法通过循环记录集中的字段来生成所需的结果,因为其中一些字段被组合在一起作为较大结构的节点。相反,您需要单独写出每个字段,在必要时打开和关闭父节点。
类似的东西:
while not rs.EOF
strXML = strXML + "<field21>" + rs!Field21.Value + "</field21>" + vbCRLF
strXML = strXML + "<vehOwned>"
strXML = strXML + "<rego1>" + rs!rego1.Value + "</rego1>" + vbCRLF
... more fields ...
strXML = strXML + "</vehOwned>"
wend
顺便说一下,Windows提供了一些库,允许您通过添加节点来创建XML文档,而不仅仅是编写文本,这样可以保证在将文档写入磁盘时文档的格式最佳。
最后,XML中有关于如何表示例如日期的规则,并且您提供的示例不遵循它们。
答案 1 :(得分:0)
您可能会考虑:
Const adOpenStatic = 3
Const adLockOptimistic = 3
Const adPersistXML = 1
Dim strCon, cn, rs
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
strCon = "Provider= Microsoft.Jet.OLEDB.4.0; Data Source=" & "C:\Docs\LTD.mdb"
cn.Open strCon
rs.Open "Select * from Table1", cn, adOpenStatic, adLockOptimistic
If Not rs.EOF Then
rs.MoveFirst
rs.Save "C:\Docs\Table1.xml", adPersistXML
End If
rs.Close
cn.Close
来自:http://wiki.lessthandot.com/index.php/Output_Access_/_Jet_to_XML