我想将 XML 文档导入 Microsoft Access 2010。以下是 XML 的一个示例:
<ROWSET>
<BIOG>
<BIOG_NBR> 10021616 </BIOG_NBR>
<FIRST_NAME> Marvin </FIRST_NAME>
<LAST_NAME> Rumple </LAST_NAME>
<ADDRESS_LIST>
<ADDRESS_TYP>
<ORG1> UNICEF </ORG1>
<ADDRESS_TYPE>Work </ADDRESS_TYPE>
<LINE_2> 23322 Bovine Blvd </LINE_2>
<US_ZIP> 770303411 </US_ZIP>
<CONTACT_LIST/>
</ADDRESS_TYP>
<ADDRESS_TYP>
<ORG1> MENSA </ORG1>
<ADDRESS_TYPE>Leisure </ADDRESS_TYPE>
<LINE_2> 421 Porcine Lane </LINE_2>
<US_ZIP> 770303411 </US_ZIP>
<CONTACT_LIST/>
</ADDRESS_TYP>
</ADDRESS_LIST>
</BIOG>
这是一个格式良好的 XML 文档。它有一个DTD
定义文档,但我删除了声明,因为 Access 导入不会接受它。 <ROWSET>
是根元素。 我的示例很简单——模式中有八个表。
当我导入这个时,我得到了两个表,BIOG
和ADDRESS_TYP
。但ADDRESS_TYP
没有显示外键BIOG_NBR
。
我该如何实现这一点?我想到了一些方法:
<BIOG_NBR>____</BIOG_NBR>
使用带有正则表达式的文本编辑器在每个 实例后立即插入<ADDRESS_TYP>
。这很不雅观,而且由于文件为 200Mb,因此可能不切实际。- 使用另一个 XML 解析器将所有数据导出到 csv 文件。这将是我的第一选择,但我的工作场所限制不允许这样做。
- 使用某种转换,例如
XSD
。我已经使用这种方法来呈现 HTML,但它适用于此任务吗?(然后,我是否仍然需要 XML 解析器?显然是的......) - 在 VBA 中使用 Microsoft XML 库。(这申请?)
简而言之: 我是否应该使用原生 XML 工具(如选项 3 所示)?我是否遗漏了其他方法?
答案1
这太容易了。
步骤 1 - 使用标准 Access“导入 XML”选项导入数据。仅限结构。
步骤 2——转到每个表并添加一个用于获取缺失键的字段。
步骤 3 - 使用 VBA。添加Microsoft XML, v6.0
库。即使是这一段多余的代码也告诉我,根据需要将密钥写入每个表将很简单。
Dim oDoc As MSXML2.DOMDocument
Dim fSuccess As Boolean
Dim oRoot As MSXML2.IXMLDOMNode
Dim oSoftkey As MSXML2.IXMLDOMNode
Dim oAttributes As MSXML2.IXMLDOMNode
Set oDoc = New MSXML2.DOMDocument
oDoc.async = False
oDoc.validateOnParse = False
fSuccess = oDoc.Load(strPath & "\specimen.xml")
If Not fSuccess Then Exit Sub
' Get the root of the XML tree.
Set oRoot = oDoc.documentElement
For Each oSoftkey In oRoot.ChildNodes
For Each oAttributes In oSoftkey.ChildNodes
Debug.Print oAttributes.Text
Next
Next oSoftkey