2017-02-17 30 views
0

Accessに、自分のXSLTコードを含むフィールドを持つテーブルがあります。 XML文書をインポートしてXSLTを使用してテーブルから変換したい。しかし、私は次のエラーを取得する:XSLTを使用してXMLを変換する

'-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 
+0

変換に使用する直前に 'xslDoc'の内容を出力して質問に追加できますか?また、エラーメッセージについてはhttps://stackoverflow.com/questions/23629754/script16389-the-stylesheet-does-not-contain-a-document-element-the-stylesheetと同様のgoogleヒットを参照してください。 – Leviathan

答えて

2

レコードセットの呼び出しであるとして、文字列からMSXMLとDOMオブジェクトをロードするたびに、後者は保存を期待するというloadよりloadXMLメソッドを使用しますディスク上のファイルまたは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 
+1

ありがとう@パルフィット!それはそれを解決しました!私は2日間その答えを探していました!調整にも感謝します! – 1122335

関連する問題