【发布时间】:2019-05-09 08:38:48
【问题描述】:
我已经尝试了 3 周来在 Access 中使用 XML 文件。我尝试了一些策略,例如转换为 CSV 并拥有一个链接表,但我更喜欢扁平化 XML,然后使用 VBA 将其导入。 我看过很多有用的例子,也学到了很多,但没有一个能让我完成这项工作。我有点新手。 我理解这一点很重要,因为接下来我需要处理一个更大的 XML 文件,因此在您的帮助下,我将调整 XSLT 以适应更大的文件。
XML 的 sn-p 在这里:
<?xml version="1.0" encoding="UTF-8"?>
<STOREITEMS><PRODUCT ITEM="R7876" NAME="Gloves Pair">
<STOCK>No Stock.</STOCK></PRODUCT>
<PRODUCT ITEM="BR122293" NAME="Silver Duo Balls">
<STOCK>In Stock</STOCK></PRODUCT>
<PRODUCT ITEM="cloneboyb" NAME="Cast Your Own Kit">
<STOCK>In Stock</STOCK></PRODUCT>
<PRODUCT ITEM="ASTRO" NAME="Astroglide">
<STOCK>In Stock</STOCK></PRODUCT>
<PRODUCT ITEM="3002028110" NAME="Translucence Pink">
<STOCK>In Stock</STOCK></PRODUCT>
<PRODUCT ITEM="0340" NAME="Cream 82g Lubricant">
<STOCK>No Stock.</STOCK></PRODUCT>
</STOREITEMS>
为了兼容我需要的 Access:
<?xml version="1.0" encoding="UTF-8"?>
<STOCK>
<PRODUCT>
<ITEM>R7876</ITEM>
<NAME>Gloves Pair</NAME>
<STOCK>No Stock.</STOCK>
</PRODUCT>
<PRODUCT>
<ITEM>BR122293</ITEM>
<NAME>Silver Duo Balls</NAME>
<STOCK>In Stock</STOCK>
</PRODUCT>
<PRODUCT>
<ITEM>cloneboyb</ITEM>
<NAME>Cast Your Own Kit</NAME>
<STOCK>In Stock</STOCK>
</PRODUCT>
<PRODUCT>
<ITEM>ASTRO</ITEM>
<NAME>Astroglide</NAME>
<STOCK>In Stock</STOCK>
</PRODUCT>
<PRODUCT>
<ITEM>3002028110</ITEM>
<NAME>Translucence Pink</NAME>
<STOCK>In Stock</STOCK>
</PRODUCT>
<PRODUCT>
<ITEM>0340</ITEM>
<NAME>Cream 82g Lubricant</NAME>
<STOCK>No Stock.</STOCK>
</PRODUCT>
</STOCK>
我尝试的大部分内容都是对我在这里其他地方看到的东西的改编,所以我没有特别的起点。
我用来应用转换和导入新 XML 文件的 VBA 脚本如下:
Dim domIn As DOMDocument30
Dim domOut As DOMDocument30
Dim domStylesheet As DOMDocument30
Dim xFile As String
Dim StyleSheet As String
Dim NewStock As String
StyleSheet = "path to XSL"
xFile = "path to xml"
NewStock = "path to intended csv"
Set domIn = New DOMDocument30
domIn.async = False
'Open the ADO xml document
If domIn.Load(xFile) Then
'Load the stylesheet
Set domStylesheet = New DOMDocument30
domStylesheet.Load StyleSheet
'Apply the transform
If Not domStylesheet Is Nothing Then
Set domOut = New DOMDocument30
domIn.transformNodeToObject domStylesheet, domOut
'Save the output
domOut.Save NewStock
'Import the saved document into Access
'Application.ImportXML NewStock
End If
End If
'Cleanup
Set domIn = Nothing
Set domOut = Nothing
Set domStylesheet = Nothing
MsgBox "done!", , "ImportXMLFromADO"
期待各位指点指点,提前谢谢大家。
【问题讨论】:
-
为什么需要 MS Access? XSLT 可以直接将 XML 转换为 CSV。在此网站上搜索此类示例。
-
不是这个 xml 文件。我确实首先尝试了最简单的选项,并在这个网站上花了很多时间查看示例。 Access 无法导入属性,因此对于有问题的 xml 文件,您从直接导入中得到的只是库存字段,无法知道它与哪个项目相关联。
-
MS 访问是我们用于 crm 和库存管理的工具。它与我们的供应商、市场和网站同步。它还连接到我们在仓库中的承运人。
-
明白。因此,您需要将 XML 数据保存在数据库中,而不仅仅是转换为 CSV。
标签: xml vba csv ms-access xslt