使用XSLT转换XML

1122335

我在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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章