将XML文件导入带有转换文件的MS Access
问题描述:
我想将XML文件导入到MS-Access中,并且我已经广泛搜索了一些类似于我的东西的例子,但是我已经简要地介绍过了。导入没有XSLT文件的结果是我只获取第一行值。例如,我得到2个表格:ABC和DEF,并且两个表格中只有第一个值(分别为'1234567891011'和'12116360102')。理想情况下,我想要的是带有所有相应值的2个字段(ABC和DEF)的表格。我可以用创建2个独立的表格来生活,但这并不理想,因为我有多个XML文件,并且在每个XML文件的一个表中管理它们会更容易。这是一个XML示例。任何帮助将非常感激。 :将XML文件导入带有转换文件的MS Access
<Codes>
<ABC>
<Value>1234567891011</Value>
<Value>1234567891110</Value>
<Value>1234567891022</Value>
</ABC>
<DEF>
<Value>12116360102</Value>
<Value>65416360402</Value>
<Value>68559760202</Value>
</DEF>
</Codes>
答
事实上,考虑XSLT,声明,特殊目的而设计的,从各种结构转换XML文件到最终使用的格式,包括其它XML,HTML,甚至TXT/CSV,语言(同类型SQL)文件。
具体来说,您需要在根的孩子(ABC,DEF等)迁移到新的节点像来源在文档的每个价值节点。将XSLT中的<mytable>
更改为您希望在MS Access中使用的表的名称,并将<Source>
更改为您希望在该新表中使用的字段名称。
XSLT脚本(另存为的.xsl文件中VBA来加载)
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output version="1.0" encoding="UTF-8" indent="yes" method="xml"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/Codes">
<xsl:copy>
<xsl:apply-templates select="*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/*/*">
<xsl:apply-templates select="*"/>
</xsl:template>
<xsl:template match="*[name()='Value']">
<mytable>
<Source><xsl:value-of select="name(parent::*)"/></Source>
<xsl:copy-of select="."/>
</mytable>
</xsl:template>
</xsl:transform>
VBA(请注意,转换的输出文件的访问被进口)
Public Sub TransformAndImportXML()
' INCLUDE Microsoft XML, v3.0 REFERENCE
Dim xmlDoc As New MSXML2.DOMDocument, xslDoc As New MSXML2.DOMDocument, newDoc As New MSXML2.DOMDocument
xmlDoc.Load "C:\Path\To\XML\Input.xml"
xslDoc.Load "C:\Path\To\XML\File.xsl"
xmlDoc.transformNodeToObject xslDoc, newDoc
newDoc.Save "C:\Path\To\XML\Output.xml"
Set xmlDoc = Nothing: Set xslDoc = Nothing: Set newDoc = Nothing
Application.ImportXML "C:\Path\To\XML\Output.xml"
MsgBox "Successfully transformed and imported XML!", vbInformation
End Sub
XML输出
<?xml version="1.0" encoding="utf-8"?>
<Codes>
<mytable>
<Source>ABC</Source>
<Value>1234567891011</Value>
</mytable>
<mytable>
<Source>ABC</Source>
<Value>1234567891110</Value>
</mytable>
<mytable>
<Source>ABC</Source>
<Value>1234567891022</Value>
</mytable>
<mytable>
<Source>DEF</Source>
<Value>12116360102</Value>
</mytable>
<mytable>
<Source>DEF</Source>
<Value>65416360402</Value>
</mytable>
<mytable>
<Source>DEF</Source>
<Value>68559760202</Value>
</mytable>
</Codes>
的MS Access进口(mytable的内容)
Source Value
ABC 1234567891011
ABC 1234567891110
ABC 1234567891022
DEF 12116360102
DEF 65416360402
DEF 68559760202
没有XSLT文件我希望将不得不使用VBA来打开该文件为文本文件对象,并读取每一行和写入数据表。 – June7