При импорте с помощью мастера MS Access все идет хорошо.Я указываю файлы XML и XSLT, которые создают две таблицы.Сохранение шагов импорта и попытка его выполнить не удаются.Вот пример XML и XSLT файлов соответственно.MS Access вводит ошибки в виде отдельной таблицы, используя в качестве ключа значения PWSID и VIOID.
<?xml version="1.0"?>
<Violations>
<Violation>
<ViolationDetail>
<PWSID>TX9999999</PWSID>
<VIOID>123456789</VIOID>
<DATAORIGINCODE>S</DATAORIGINCODE>
<CCODE>7500</CCODE>
<VCODE>75</VCODE>
<BEGINDATE>2015-04-28</BEGINDATE>
<Errors>
<Error>
<ErrorDescription>
Error description here
</ErrorDescription>
<ErrorCode>ERR0037</ErrorCode>
</Error>
</Errors>
</ViolationDetail>
</Violation>
<Violation>
<ViolationDetail>
<PWSID>TX9999999</PWSID>
<VIOID>234567890</VIOID>
<DATAORIGINCODE>S</DATAORIGINCODE>
<CCODE>7500</CCODE>
<VCODE>71</VCODE>
<BEGINDATE>2015-05-15</BEGINDATE>
<Errors>
<Error>
<ErrorDescription>
Error description here
</ErrorDescription>
<ErrorCode>ERR0048</ErrorCode>
</Error>
</Errors>
</ViolationDetail>
</Violation>
</Violations>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<dataroot>
<xsl:apply-templates select="@*|node()"/>
</dataroot>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="ERRORS">
<xsl:apply-templates select="@*|node()"/>
</xsl:template>
<xsl:template match="ERROR">
<ERROR>
<PWSID><xsl:value-of select="../../PWSID"/></PWSID>
<xsl:apply-templates select="@*|node()"/>
<VIOID><xsl:value-of select="../../VIOID"/></VIOID>
<xsl:apply-templates select="@*|node()"/>
</ERROR>
</xsl:template>
</xsl:stylesheet>
Моя попытка использовать код VBA - это то, что я изменил из решения, найденного во время поиска:
Public Sub importErrorFiles()
' REFERENCE MS XML, v6.0
Dim xmlDoc As New MSXML2.DOMDocument60
Dim xslDoc As New MSXML2.DOMDocument60
Dim newDoc As New MSXML2.DOMDocument60
Dim strFileXML As String, strFileXSL As String
Dim strPathXML As String, strPathXSL As String
strPathXSL = CurrentProject.Path & "\xslSheets\"
strPathXML = CurrentProject.Path & "\workingReports\"
strFileXML = Dir(strPathXML & "*.xml")
While strFileXML <> ""
' REINITIALIZE DOM OBJECTS
Set xslDoc = New MSXML2.DOMDocument60
Set xmlDoc = New MSXML2.DOMDocument60
Set newDoc = New MSXML2.DOMDocument60
strFileXSL = strPathXSL & Replace(strFileXML, "xml", "xslt")
If fileExists(strFileXSL) Then
' LOAD XML SOURCE
xmlDoc.Load strPathXML & strFileXML
' LOAD XSL FILE
xslDoc.Load strPathXSL & strFileXSL
' TRANSFORM SOURCE
xmlDoc.transformNodeToObject xslDoc, newDoc
newDoc.Save strPathXML & "temp.xml"
' APPEND TO TABLES
Application.ImportXML strPathXML & "temp.xml", acAppendData
strFile = Dir()
End If
Wend
' RELEASE DOM OBJECTS
Set xmlDoc = Nothing: Set xslDoc = Nothing: Set newDoc = Nothing
End Sub
Ошибка в строке transformNodeToObject
:
Таблица стилей не содержит элемент документа.Кажется, что таблица стилей пуста или не является правильно сформированным XML-документом.
Oh и fileExists
- логическая функция, которая работает.Спасибо за любую помощь.