我在Access中有一个表,其中有一个包含我的XSLT代码的字段。我想导入XML文档,并使用表中的XSLT对其进行转换。但是,出现以下错误:
'-2147467259 (800004005)' the stylesheet does not contain a document element. The stylesheet may be empty, or it may not be a well-formed xml document
使用xml验证程序的检查成功。
Private Sub btnImport_Click()
Dim StrFileName As String
Dim fd As FileDialog
Dim vrtSelectedItem As Variant
Dim strFile As String, strPath As String
Dim xmlDoc As New MSXML2.DOMDocument60, xslDoc As New MSXML2.DOMDocument60
Dim newDoc As New MSXML2.DOMDocument60
Dim daoRST As DAO.Recordset: Set daoRST = CurrentDb.OpenRecordset("Attachments"): Debug.Print daoRST.Fields("XML").Value:
Set xmlDoc = New MSXML2.DOMDocument60
Set newDoc = New MSXML2.DOMDocument60
Set fd = Application.FileDialog(msoFileDialogFilePicker)
With fd
.InitialFileName = "C:\Users\1122335\Desktop\*.xml"
If .Show = -1 Then
For Each vrtSelectedItem In .SelectedItems
xslDoc.Load daoRST.Fields("XML").Value
' LOAD XML SOURCE
xmlDoc.Load vrtSelectedItem
' TRANSFORM SOURCE
xmlDoc.transformNodeToObject xslDoc, newDoc '<<ERROR HERE
newDoc.Save "C:\Users\1122335\Desktop\temp.xml"
' APPEND TO TABLES
On Error Resume Next
Application.ImportXML "C:\Users\1122335\Desktop\temp.xml", acAppendData
Next vrtSelectedItem
Else
End If
End With
End Sub
错误发生在此行:
xmlDoc.transformNodeToObject xslDoc, newDoc
每当使用记录集调用方式从字符串加载带有MSXML的DOM对象时,都应使用该loadXML
方法,而不是load
后者希望该方法在磁盘或url路径上保存文件的方法。
因此,只需更改:
xslDoc.Load daoRST.Fields("XML").Value
至:
xslDoc.LoadXML daoRST.Fields("XML").Value
顺便说一句,您不需要在每次循环迭代时重新加载XSLT,而只需要在外部一次加载,而XML对象应该在循环内部重新初始化,而不是在外部重新初始化。考虑以下调整:
...
' LOAD XSL SCRIPT
xslDoc.LoadXML daoRST.Fields("XML").Value
Set fd = Application.FileDialog(msoFileDialogFilePicker)
With fd
.InitialFileName = "C:\Users\1122335\Desktop\*.xml"
If .Show = -1 Then
For Each vrtSelectedItem In .SelectedItems
' INITIALIZE XML OBJECTS
Set xmlDoc = New MSXML2.DOMDocument60
Set newDoc = New MSXML2.DOMDocument60
' LOAD XML SOURCE
xmlDoc.Load vrtSelectedItem
' TRANSFORM SOURCE
xmlDoc.transformNodeToObject xslDoc, newDoc
newDoc.Save "C:\Users\1122335\Desktop\temp.xml"
' APPEND TO TABLES
On Error Resume Next
Application.ImportXML "C:\Users\1122335\Desktop\temp.xml", acAppendData
Next vrtSelectedItem
End If
End With
' FREE RESOURCES
Set xmlDoc = Nothing
Set newDoc = Nothing
Set xslDoc = Nothing
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句