Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

xml.datei mit vba lesen

Forumthread: xml.datei mit vba lesen

xml.datei mit vba lesen
13.05.2019 20:25:15
ing.grohn
Hallo Forum,
ich suche nun schon ein geraume Zeit nach Infos zu xml-Dateien.
Bin aber nicht wirklich zum Ziel gekommen.
Kennt jemand die Datei: xjustiz_nachricht.xml
und kann mir zeigen, wie ich sie per VBA auslesen/auswerten kann?
Für eure Bemühungen bedanke ich mich.
MfG
Albrecht
(eine Beispieldatei kann ich nicht anbieten (siehe Namen))
Anzeige

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: im Prinzip ...
13.05.2019 22:32:18
Fennek
Hallo,
könnte eine interessante Frage sein, aber das File mit den Erklärungen benötigt schon VIEL mehr Einarbeitungszeit, als in einem Forum möglich ist.
Jeder Code, der html bzw. xml ausliest muss an einem Beispiel entwickelt werden. Mit echten Daten geht das aber nicht.
Falls Du es so auf ein Detail reduzieren kannst, dass es in ca. 15-20 Minuten bearbeitet werden kann, ist Hilfe vielleicht möglich.
mfg
Anzeige
AW: im Prinzip ...
14.05.2019 06:53:46
ing.grohn
Hallo Forum,
ich habs mir fast gedacht. Dass das nicht so einfach zu sein scheint, sieht man ja am IE. Öffnet man damit eine xml-Datei, die nicht ganz OK ist, sieht mit auch nur einen seltsamen String!
Trotzdem vielen Dank.
Als Ausweg les ich den ganzen "Quatsch" in einen String und such mir die "wichtigen" Dinge raus.
Mit freundlichen Grüßen
Albrecht
Anzeige
AW: xml.datei mit vba lesen
14.05.2019 09:27:50
peterk
Hallo
Unter https://xjustiz.justiz.de/xjustiz_2_4/index.php findest Du die Spezifikation deines Dokuments (über 1000 Seiten ;-) )
Im Anhang findest Du ein Code Schnipsel wie es im Prinzip gehen würde (bezieht sich aber nicht auf Deine XML).

Option Explicit
Dim xDoc As MSXML2.DOMDocument60
Public Sub LoadDocument()
Set xDoc = New MSXML2.DOMDocument60
xDoc.validateOnParse = True
If xDoc.Load("C:\Users\?\Downloads\123098.xml") Then
' The document loaded successfully.
Debug.Print "Load success ...."
Else
' The document failed to load.
Debug.Print "Load failed ...."
End If
End Sub
Sub GetKD_ID(myCustomer As String)
Dim oSeqNodes As IXMLDOMNodeList
Dim oSeqNode As IXMLDOMNode
Dim oSeqChild As IXMLDOMNode
Set oSeqNodes = xDoc.SelectNodes("//BrandData/" & myCustomer)
If oSeqNodes.Length = 0 Then
'show some message
Else
For Each oSeqNode In oSeqNodes
For Each oSeqChild In oSeqNode.ChildNodes
Debug.Print oSeqChild.nodeName
Next
Next
End If
End Sub

Anzeige
AW: xml.datei mit vba lesen und Umlaute
15.05.2019 10:24:36
ing.grohn
Hallo Forum, Hallo Peter,
vielen Dank für den Link. Um weiter zu kommen, lese ich die XML-Datei in einen String ein und selektiere die für mich wichtigen Elemente aus. Reicht völlig!
Allerdings gibs Probleme mit den Umlauten: das "ö" wir z.B. als A mit Tilde + Absatzmarke Word dargestellt (Word, Editor, Notepad++ interpretieren das korrekt).
(Ich dachte das Problem wäre ad acta!)
Ich denke das ist ein Codeseitenproblem ()!!?
Kann da jemand helfen oder muss ich jeden Teilstring analysieren?
Für die Mühe bedanke ich mich
Mit freundlichen Grüßen
Albrecht
Anzeige
AW: xml.datei mit vba lesen und Umlaute
15.05.2019 10:33:58
peterk
Hallo
Wie liest Du den XML-File ein (der ist meist UTF-8 kodiert)?
AW: xml.datei mit vba lesen und Umlaute
15.05.2019 13:16:37
ing.grohn
Hallo Peter
bis Dateiende Input #1, strText
MfG
Albrecht
AW: xml.datei mit vba lesen und Umlaute
15.05.2019 14:00:59
peterk
Hallo
Das funktioniert so nicht. Um eine UTF-8 einzulesen mußt Du ADODB.Stream verwenden. Anbei ein kleines Beispiel

Sub ReadFileUTF()

  Dim myObj As Object
  Dim myStr As String
  
  If myObj Is Nothing Then Set myObj = CreateObject("ADODB.Stream")
  
  myObj.CharSet = "utf-8"
  myObj.Open
  myObj.LoadFromFile "C:\Users\a.xml" ' anpassen 
  
  Do Until myObj.EOS
       myStr = myObj.ReadText(-2)     ' hier wird Zeilenweise gelesen 
       Debug.Print myStr              ' hier gehts mit deinem Programm weiter 
  Loop
  myObj.Close
End Sub

VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 15 - mit VBAHTML 12.6.0



Anzeige
AW: xml.datei mit vba lesen und Umlaute
15.05.2019 15:47:52
ing.grohn
Hallo Peter,
das Einlesen der Daten hat schon geklappt!
War halt das Problem mit den Umlauten.
Ich versuchs!
Vielen Dank
Albrecht
AW: xml.datei mit vba lesen und Umlaute
15.05.2019 13:25:01
ing.grohn
mit Codeseiten hab ich mich nicht beschäftigt.
und ich weiss, das man bei xml eigtl _Umlaute speziell behandeln muss
Ä Ä etc.
die stehen da aber anders drin: z.B. Schröder - Schröder
mfG
Albrecht
Anzeige
XML-Dateien lese ich in der Regel...
15.05.2019 13:52:17
Case
Hallo Albrecht, :-)
... so ein: ;-)
Option Explicit
Public Sub Main()
Dim strUTF8 As String
Dim objStream As Object
Set objStream = CreateObject("ADODB.Stream")
With objStream
.Charset = "UTF-8"
.Open
.LoadFromFile "C:\Temp\Tes.xml"
strUTF8 = .ReadText(-1)
.Close
Debug.Print strUTF8
End With
Set objStream = Nothing
End Sub
Klappt auch mit Umlauten.
Servus
Case

Anzeige
AW: XML-Dateien lese ich in der Regel...
15.05.2019 15:49:37
ing.grohn
Hallo Case,
vielen Dank!
Ich werde Eure Lösung (Peter hat ein ähnliches Beispiel) versuchen und hoffe die Umlaute sind wieder ordentlich!
Albrecht
AW: xml.datei mit vba lesen und Umlaute
15.05.2019 16:11:10
ing.grohn
Hallo,
die Umlaute sind DA!!!
einen schönen Tag
Albrecht
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

XML-Datei mit VBA einlesen und auswerten


Schritt-für-Schritt-Anleitung

Um eine XML-Datei mit VBA einzulesen, kannst du die MSXML2.DOMDocument60-Klasse verwenden. Hier ist eine einfache Schritt-für-Schritt-Anleitung:

  1. VBA-Umgebung öffnen: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Referenz hinzufügen: Gehe zu ExtrasVerweise und aktiviere Microsoft XML, v6.0.

  3. Neues Modul erstellen: Klicke mit der rechten Maustaste auf "VBAProject" → EinfügenModul.

  4. Code einfügen: Füge diesen Code in das Modul ein:

    Option Explicit
    Dim xDoc As MSXML2.DOMDocument60
    
    Public Sub LoadDocument()
       Set xDoc = New MSXML2.DOMDocument60
       xDoc.validateOnParse = True
       If xDoc.Load("C:\Users\?\Downloads\xjustiz_nachricht.xml") Then
           Debug.Print "Load success ...."
       Else
           Debug.Print "Load failed ...."
       End If
    End Sub
  5. Daten abfragen: Verwende die folgende Funktion, um spezifische Daten aus der XML-Datei auszulesen:

    Sub GetData(myNode As String)
       Dim oNodes As IXMLDOMNodeList
       Dim oNode As IXMLDOMNode
       Set oNodes = xDoc.SelectNodes("//" & myNode)
       For Each oNode In oNodes
           Debug.Print oNode.Text
       Next
    End Sub
  6. Makro ausführen: Führe das Makro LoadDocument aus und teste die Funktion GetData.


Häufige Fehler und Lösungen

  • Fehler beim Laden der XML-Datei:

    • Überprüfe den Dateipfad und stelle sicher, dass die Datei existiert.
    • Achte darauf, dass die XML-Datei korrekt formatiert ist.
  • Umlaute werden falsch dargestellt:

    • Verwende ADODB.Stream, um die Datei mit UTF-8 zu laden:
    Sub ReadFileUTF()
       Dim myObj As Object
       Dim myStr As String
       Set myObj = CreateObject("ADODB.Stream")
       myObj.CharSet = "utf-8"
       myObj.Open
       myObj.LoadFromFile "C:\Users\yourfile.xml"
       myStr = myObj.ReadText(-1)
       Debug.Print myStr
       myObj.Close
    End Sub

Alternative Methoden

  • PHP zum Einlesen von XML: Wenn du PHP verwendest, kannst du XML-Dateien mit der simplexml_load_file()-Funktion einlesen.

    $xml = simplexml_load_file("path/to/your.xml");
    print_r($xml);
  • Power Query in Excel: Du kannst auch Power Query verwenden, um XML-Daten direkt in Excel zu importieren und zu transformieren.


Praktische Beispiele

Hier sind einige Beispiele, wie du spezifische Daten aus einer XML-Datei extrahieren kannst:

  • Beispiel, um alle BrandData-Elemente zu lesen:

    Sub ReadBrandData()
       Dim oNodes As IXMLDOMNodeList
       Set oNodes = xDoc.SelectNodes("//BrandData")
       Dim i As Integer
       For i = 0 To oNodes.Length - 1
           Debug.Print oNodes.Item(i).Text
       Next i
    End Sub
  • Beispiel für das Erstellen einer XML-Datei:

    Sub CreateXML()
       Dim xmlDoc As Object
       Set xmlDoc = CreateObject("MSXML2.DOMDocument.6.0")
       Dim root As Object
       Set root = xmlDoc.createElement("Root")
       xmlDoc.appendChild root
       Dim item As Object
       Set item = xmlDoc.createElement("Item")
       item.Text = "Test"
       root.appendChild item
       xmlDoc.Save "C:\Users\yourfile.xml"
    End Sub

Tipps für Profis

  • Nutze Debug.Print, um Variablenwerte während der Entwicklung zu überprüfen.
  • Arbeite mit IXMLDOMNodeList, um einfache XPath-Abfragen durchzuführen.
  • Halte deine XML-Dateien sauber und valide, um Parsing-Probleme zu vermeiden.

FAQ: Häufige Fragen

1. Wie kann ich eine XML-Datei in Excel importieren? Du kannst die XML-Datei über DatenAbrufen und transformierenAus DateiAus XML importieren.

2. Was ist der Unterschied zwischen DOM und SAX? DOM lädt die gesamte XML-Datei in den Speicher, während SAX die Datei sequentiell liest und weniger Speicher benötigt. SAX ist ideal für große Dateien.

3. Wie kann ich Umlaute in einer XML-Datei korrekt darstellen? Stelle sicher, dass die XML-Datei mit UTF-8 kodiert ist und verwende ADODB.Stream, um die Datei zu lesen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige