使用节点将输出访问表转换为XML

时间:2009-11-05 05:20:33

标签: xml vba access-vba

我正在尝试将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  

2 个答案:

答案 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