Clever-Excel-Forum

Normale Version: [VBA] XML einlesen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Moin!

Ich habe folgendes Problem: Ich bekomme meine XML Datei nicht eingelesen.

Die XML sieht wie folgt aus:

Code:
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<type>F</type>
<name>Mustermann, Max</name>
<number>111</number>
<date>20.09.1978</date>
<work>Klempner</work>
<bes1>Bereich1</bes1>
<bes2>Bereich2</bes2>
<bes3>Bereich3</bes3>
<from>Schlumpfenhausen</from>

Ich versuche die Daten wie folgt herauszulesen:

Code:
Dim objXML As MSXML2.DOMDocument
Dim Art_S As String
Dim Name_S As String
Dim Nummer_S As String
Dim Datum_S As String
Dim Arbeit_S As String
Dim Bes1_S As String
Dim Bes2_S As String
Dim Bes3_S As String

Set objXML = New MSXML2.DOMDocument

If Not objXML.LoadXML(strXML) Then  'strXML is the string with XML'
    Err.Raise objXML.parseError.ErrorCode, , objXML.parseError.reason
End If

Dim point As IXMLDOMNode
Set point = objXML.FirstChild

Art_S = point.SelectSingleNode("type").Text
Name_S = point.SelectSingleNode("name").Text
Nummer_S = point.SelectSingleNode("number").Text
Datum_S = point.SelectSingleNode("date").Text
Arbeit_S = point.SelectSingleNode("work").Text
Bes1_S = point.SelectSingleNode("bes1").Text
Bes2_S = point.SelectSingleNode("bes2").Text
Bes3_S = point.SelectSingleNode("bes3").Text

An der Stelle Err.Raise objXML.parseError.ErrorCode, , objXML.parseError.reason bekomme ich stets den Fehler "ungültig auf oberster Ebene des Dokuments", ich habe jedoch schon alles probiert, ob iso, utf, jp, nichts wird eingelesen. Zur Info, ich habe den Microsoft XML 3.0 Verweis drin, da 6.0 gar nicht erst anlief.

Kann mir jemand auf die Sprünge helfen?

Liebe Grüße
Vielleicht =XMLFILTERN() (gibt es seit XL2013) als Formel aufzeichnen? Dann spart man sich den sonstigen Code.
Es wäre schön, die Lösung direkt in VBA zu haben, da ich damit eine UserForm füllen möchte, und die Daten gar nicht erst irgendwo in Zellen greifbar haben möchte.
Du kannst Excelformeln/Funktionen in der Regel auch über VBA verwenden. Am Beispiel von Lupos vorgeschlagener Funktion:
Code:
Application.WorksheetFunction.FilterXML(...)

Alternativ kannst Du es auch über DOM machen. Im Netz gibt es genug Seiten, die das beschreiben, hier eine kleine Auswahl:
https://analystcave.com/vba-xml-working-xml-files/
https://www.e_d_u_c_b_a.com/vba-xml/
https://excel-macro.tutorialhorizon.com/...-xml-file/

Noch eine Alternative: Du programmierst den Parser selbst in VBA

Noch eine weitere Alternative: Du verwendest Power Query
Es fehlt ganz einfach das umschließende Element - oder so Smile
(03.03.2022, 09:50)Der Steuerfuzzi schrieb: [ -> ]Alternativ kannst Du es auch über DOM machen. Im Netz gibt es genug Seiten, die das beschreiben, hier eine kleine Auswahl:
https://analystcave.com/vba-xml-working-xml-files/
https://www.e_d_u_c_b_a.com/vba-xml/
https://excel-macro.tutorialhorizon.com/...-xml-file/

Das hat mir sehr geholfen! Vielen Dank! Wundert mich, dass meine Suchmaschine diese nicht ausgespuckt hat.
In diesem Fall (die Daten die du gepostet hast):

Code:
Sub M_snb()
  sn = Filter(Split(CreateObject("scripting.filesystemobject").opentextfile("G:\OF\XML_snb.xml").readall, vbCrLf), "</")
  sn = Split(Join(Filter(Split(Replace(Replace(Join(sn, ","), Left(sn(0), InStr(sn(0), ">")), "|"), ">", "/<"), "<"), "/", 0), ""), "|")
 
  MsgBox Join(sn, vbLf)
End Sub