У меня есть XSLT-файл, который преобразует многоузловые XML-файлы для MS Access, и мне нужно перехватить имя файла XML-файла. Я хочу использовать его как дополнительный столбец в процессе преобразования, чтобы добавить к таблицам, которые заполняются. В идеале я хотел бы вставить тег в узел "INTERFACE_BATCH" или узел PART_DETAIL.
<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="INTERFACE_BATCH">
<xsl:apply-templates select="@*|node()"/>
</xsl:template>
<xsl:template match="PART_DETAIL">
<PART_DETAIL>
<ERP_NUMBER><xsl:value-of select="../ERP_NUMBER"/></ERP_NUMBER>
<PLANT><xsl:value-of select="../PLANT"/></PLANT>
<PROCESS><xsl:value-of select="../PROCESS"/></PROCESS>
<STORAGE_LOCATION><xsl:value-of select="../STORAGE_LOCATION"/></STORAGE_LOCATION>
<xsl:apply-templates select="@*|node()"/>
</PART_DETAIL>
</xsl:template>
РЕДАКТИРОВАТЬ ПОСТ: это данные VBA, которые я использую для загрузки и преобразования данных XML
Private Sub btnImportData_Click()
'transform and load xml files into tables
Dim strFile As String, strPath As String
Dim xmlDoc As New MSXML2.DOMDocument60, xslDoc As New MSXML2.DOMDocument60
Dim newDoc As New MSXML2.DOMDocument60
strPath = "\\linbs002\ABI Master Data\ES_XML\"
strFile = Dir(strPath & "*.xml")
' LOAD XSL ONLY ONCE
xslDoc.Load strPath & "material_new.xsl"
On Error Resume Next
DoCmd.SetWarnings False
While strFile <> ""
' REINITIALIZE DOM OBJECTS
Set xmlDoc = New MSXML2.DOMDocument60
Set newDoc = New MSXML2.DOMDocument60
' LOAD XML SOURCE
xmlDoc.Load strPath & strFile
' TRANSFORM SOURCE
xmlDoc.transformNodeToObject xslDoc, newDoc
newDoc.Save strPath & "temp.xml"
' APPEND TO TABLES
Application.ImportXML strPath & "temp.xml", acAppendData
strFile = Dir()
Wend
DoCmd.SetWarnings True
' RELEASE DOM OBJECTS
Set xmlDoc = Nothing: Set xslDoc = Nothing: Set newDoc = Nothing
'delete unneeded tables
DoCmd.DeleteObject acTable, "DESCRIPTOR"
DoCmd.DeleteObject acTable, "DESCRIPTOR_PROPERTY"
DoCmd.DeleteObject acTable, "ImportErrors"
'append data to table ES_Materials
DoCmd.OpenQuery "EngineeringSpares", acViewNormal
'clear data from temp tables
DoCmd.RunSQL "DELETE MATERIAL_ITEM.* FROM MATERIAL_ITEM;"
DoCmd.RunSQL "DELETE PART_DETAIL.* FROM PART_DETAIL;"
'delete xml files from folder
Kill strPath & "*.XML"
'advise job complete
MsgBox "Load & Transform complete", vbInformation, "XML data upload"
End Sub
Редактировать сообщение:
Я попытался добавить строку обновления, предложенную @ June7, безуспешно
' APPEND TO TABLES
Application.ImportXML strPath & "temp.xml", acAppendData
Debug.Print strPath & strFile
rst.Edit
CurrentDb.Execute "UPDATE ES_Materials SET FilePath='" & strPath & strFile & "' WHERE FilePath Is Null"
rst.MoveNext
rst.Update