Ich möchte die Daten einer XML Datei nach Access 2000 importieren.
Wenn in der XML Datei die Werte "alleine stehen" (<Element>INHALT</Element>), dann ist es kein Problem "INHALT" einer Variable zuzuweisen.
Wenn die XML Struktur so aussieht: "<metatag name="heigth" type="System.Int32">2557</metatag>" und sich diese Struktur mit abwechselnden Namen (name="alignment", name="heigth", name="width" etc.) wiederholt, weiß ich nicht, wie ich NUR "heigth" ansprechen kann. Ich will praktisch sagen: Wenn Programmcode bei <metatags> angekommen ist, dann suche nach "heigth" und schreibe dessen Wert (und keinen anderen) in die Variable.
Würde mich freuen, wenn Ihr mir helfen könnt - Danke im Voraus!
Gruß
J.R.
Inhalt des XML Files (test.xml) - Ausschnitt, um den es letztendlich geht:
VBA-Code
Wenn in der XML Datei die Werte "alleine stehen" (<Element>INHALT</Element>), dann ist es kein Problem "INHALT" einer Variable zuzuweisen.
Wenn die XML Struktur so aussieht: "<metatag name="heigth" type="System.Int32">2557</metatag>" und sich diese Struktur mit abwechselnden Namen (name="alignment", name="heigth", name="width" etc.) wiederholt, weiß ich nicht, wie ich NUR "heigth" ansprechen kann. Ich will praktisch sagen: Wenn Programmcode bei <metatags> angekommen ist, dann suche nach "heigth" und schreibe dessen Wert (und keinen anderen) in die Variable.
Würde mich freuen, wenn Ihr mir helfen könnt - Danke im Voraus!
Gruß
J.R.
Inhalt des XML Files (test.xml) - Ausschnitt, um den es letztendlich geht:
Code:
<?xml version="1.0" encoding="utf-16" ?> <metatags> <metatag name="alignment" type="System.String">H</metatag> <metatag name="posX" type="System.Int32">635</metatag> <metatag name="posY" type="System.Int32">438</metatag> <metatag name="heigth" type="System.Int32">2559</metatag> <metatag name="width" type="System.Int32">1275</metatag> <metatag name="pageWidth" type="System.Int32">2480</metatag> <metatag name="pageHeigth" type="System.Int32">3520</metatag> <metatag name="fullpage" type="System.Int32">1</metatag> <metatag name="ID_SES_Medienblatt" type="System.Int32">17818167</metatag> </metatags>
Code:
Option Compare Database Option Explicit Public XYZ As Recordset Public DeBe As Database Public StatusOffen Public medienblattID Public PdF Public ThemenId Public FirstEntry Public tk Public mtheigth As Integer Public mtwidth As Integer Public sthoehe As Integer Public stbreite As Integer Public preis_1c As Single Public objNode As MSXML2.IXMLDOMNode Private Sub Befehl30_Click() On Error GoTo Err_Befehl30_Click Dim objDoc As DOMDocument Dim dateiname As String dateiname = "S:\XYZ\test.xml" If Not L_fileexist(dateiname) Then MsgBox "Keine Datei " & dateiname & " vorhanden", vbCritical, "Hinweis" Exit Sub End If Set objDoc = CreateObject("MSXML2.DOMDocument") objDoc.Load dateiname ' XML-Document laden StatusOffen = False FirstEntry = True Call GetChildNodes(nodeList:=objDoc.childNodes) End Sub ‘///// Public Sub GetChildNodes(ByVal nodeList As MSXML2.IXMLDOMNodeList) On Error GoTo Err_GetChildNodes_Click For Each objNode In nodeList If objNode.hasChildNodes = True Then If objNode.nodeName = "Meldung" Then If StatusOffen Then XYZ!Medienblatt_ID = medienblattID XYZ!pdf_name = PdF XYZ!headline = headline XYZ!ZYX_thema_id = ThemenId XYZ!ursprungsthema = ThemenId XYZ!einlesedatum = Date XYZ!Textkuerzel = tk XYZ.Update XYZ.Close Set XYZ = Nothing Set DeBe = Nothing If Not IsNull(ThemenId) Then DoCmd.SetWarnings False DoCmd.RunSQL ("UPDATE XYZ SET XYZ.ZYX_thema_id = ThemenId, XYZ.ursprungsthema = ThemenId WHERE (((XYZ.Medienblatt_ID)=[medienblattID]))") DoCmd.SetWarnings True ThemenId = Null End If StatusOffen = False Else If FirstEntry Then FirstEntry = False Else Set DeBe = CurrentDb Set XYZ = DeBe.OpenRecordset("XYZ", dbOpenDynaset, dbSeeChanges) XYZ.AddNew medienblattID = Null PdF = Null headline = Null ThemenId = Null tk = Null StatusOffen = True End If End If End If If objNode.nodeName = "Erscheinen" Then If StatusOffen Then XYZ!Medienblatt_ID = medienblattID XYZ!pdf_name = PdF XYZ!headline = headline XYZ!ZYX_thema_id = ThemenId XYZ!ursprungsthema = ThemenId XYZ!einlesedatum = Date XYZ!Textkuerzel = tk XYZ.Update XYZ.Close Set XYZ = Nothing Set DeBe = Nothing Set DeBe = CurrentDb Set XYZ = DeBe.OpenRecordset("XYZ", dbOpenDynaset, dbSeeChanges) XYZ.AddNew StatusOffen = True Else Set DeBe = CurrentDb Set XYZ = DeBe.OpenRecordset("XYZ", dbOpenDynaset, dbSeeChanges) XYZ.AddNew StatusOffen = True End If End If Call GetChildNodes(nodeList:=objNode.childNodes) Else Select Case objNode.parentNode.nodeName Case "ID_Medienblatt" medienblattID = objNode.nodeTypedValue Case "ID" XYZ!XYZ_medien_ID = objNode.nodeTypedValue Case "metatag" ' in diesem Case heigth und width in Variable mtheigth/mtwidth einlesen Case "Hoehe" sthoehe = objNode.nodeTypedValue Case "Breite" stbreite = objNode.nodeTypedValue End Select End If Next objNode End Sub
Comment