Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1892to1896
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

XML Parsing Probleme

XML Parsing Probleme
12.08.2022 21:31:13
Peet
Hallo,
ich habe Probleme beim Auswerten einer XML Datei. Was mir dabei zu schaffen macht, ist die Tiefe der Knoten. Einzelne Knoten kann ich ansprechen und mir entsprechende Informationen ausgeben lassen. Das ganze in eine Schleife zu packen und für alle Knoten ausgeben zu lassen, scheiterte bisher vergeblich.
Hier ist der VBA Code. Ich lade ein XML-File über einen Button. Über einen Tipp wäre ich sehr dankbar.

Private Sub CommandButton1_Click()
Dim fd As Office.FileDialog
Set fd = Application.FileDialog(msoFileDialogFilePicker)
With fd
.Filters.Clear
.Title = "Select a XML File"
.Filters.Add "XML File", "*.txt", 1
.AllowMultiSelect = False
If .Show = True Then
xmlFileName = .SelectedItems(1)
'Processing PAR File
Dim xDoc As Object
Set xDoc = CreateObject("MSXML2.DOMDocument")
xDoc.async = False: xDoc.validateOnParse = False
xDoc.Load (xmlFileName)
'Get Root Node
Debug.Print xDoc.SelectSingleNode("/LevelOne/LevelTwo/Parameter/Name").Text
Debug.Print xDoc.SelectSingleNode("/LevelOne/LevelTwo/Parameter/Style/Line/Color1").Text
End If
End With
End Sub
Beispiel XML-File:




ParameterOne

0
1




FF8C00
000000
1



1



Auto
Auto



0
1
0
0
0
0
0
0
1
0


ParameterOne
0


0
5


0
10

1

0
1
1

FF0000
0
1




0
0
0


0
A9A9A9

2
0
10
0.000000
0

0
10
0.000000
0



0
10
0.02



ParameterTwo

0
1




FFFFFF
000000
1



1



Auto
Auto



0
1
0
0
0
0
0
0
1
0


ParameterTwo
0


0
5


0
10

1

0
1
1

FFFFFF
0
1




0
0
0


0
A9A9A9

2
0
10
0.000000
0

0
10
0.000000
0



0
10
0.02




1.0.0.0


5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: XML Parsing Probleme
13.08.2022 04:29:35
Oberschlumpf
Hi,
ähh? Und so ganz ohne Bsp-Datei soll'n wir uns das jetzt "zurechtbasteln", wo du doch auch schon mit Datei noch nich zurechtkommst?! :-)
Ciao
Thorsten
AW: XML Parsing Probleme
13.08.2022 08:51:37
Peet
Sorry, ich hatte ein Beispiel-XML-File darunter gepostet. Irgendetwas ging da beim reinkopieren komplett schief.
Hier ist nochmal meine Beispiel XML-Datei.
https://www.herber.de/bbs/user/154628.txt
AW: XML Parsing Probleme
13.08.2022 20:15:56
Zwenn
Hallo Peet,
Du brauchst nicht immer den gesamten Pfad durch das XML-Dokument angeben, um auf einen Knoten zuzugreifen, wenn Du mit getElementsByTagName() arbeitest. Ich habe Dein Beispiel so umgeschrieben, dass die Werte für Name und Color1 aus beiden Parameter-Tag-Abschnitten in einer Schleife ausgegeben werden. Für weitere Werte brauchst Du nur den Schleifenrumpf ergänzen.
Ich habe kommentiert, was da passiert:

Option Explicit
Private Sub CommandButton1_Click()
Dim xDoc As Object
Dim nodeAllParam As Object
Dim nodeOneParam As Object
Dim xmlFileName As String
Dim fd As Office.FileDialog
Set fd = Application.FileDialog(msoFileDialogFilePicker)
With fd
.Filters.Clear
.Title = "Select a XML File"
.Filters.Add "XML File", "*.txt", 1
.AllowMultiSelect = False
If .Show = True Then
xmlFileName = .SelectedItems(1)
'Processing PAR File
Set xDoc = CreateObject("Msxml2.DOMDocument.6.0")
xDoc.async = False: xDoc.validateOnParse = False
xDoc.Load (xmlFileName)
'Die Methode getElementsByTagName() liefert eine Node-Collection zurueck,
'die alle Parts des verwendeten Tag-Namens als Elemente enthält.
'Dabei spielt es keine Rolle, in welcher Ebene ein Tag steht.
'Da alle gewuenschten Werte jeweils im Tag Parameter hinterlegt sind,
'Wird als erstes eine Node-Collection aus allen Parameter Abschnitten aufgebaut
Set nodeAllParam = xDoc.getElementsByTagName("Parameter")
'Mit einer For-Each-Schleife kann einfach durch die Collection iteriert werden
For Each nodeOneParam In nodeAllParam
'Auf jedes Element kann wieder getElementsByTagName() angewendet werden
'Um direkt auf ein Element zuzugreifen, wird es über seinen Index in
'der Collection angesprochen. Das erste Element hat den Index 0
'Die Eigenschaft Text enthaelt den gespeicherten Wert
Debug.Print nodeOneParam.getElementsByTagName("Name")(0).Text
Debug.Print nodeOneParam.getElementsByTagName("Color1")(0).Text
Next nodeOneParam
End If
End With
End Sub
Noch zwei Anmerkungen zum Abschluss:
1. Verwende in jedem Modul ganz oben den Befehl Option Explicit. Dadurch prüft der Interpreter beim Start eines Makros als erstes, ob alle verwendeten Variablen deklariert sind. Das spart Dir mitunter die Suche nach "komischen Fehlern", die am Ende nur ein Tippfehler sind. Außerdem musst Du Dir Gedanken über die richtigen Datentypen machen.
2. Variablen werden alle im Kopf einer Sub() bzw. Function() deklariert. Ich weiß, dass es inzwischen bei manchen Entwicklern "en vogue" ist, die Deklarationen erst dort hinzuschreiben, wo die Variable das erste Mal verwendet wird. Ich halte das für kontraproduktiv. Alle im Kopf sorgt für eine schnelle Übersicht und bei Codeumstellungen oder Löschen von Codezeilen, steht trotzdem immer noch alles an der richtigen Stelle.
Viele Grüße,
Zwenn
Anzeige
AW: XML Parsing Probleme
14.08.2022 17:19:44
Peet
Hallo Zwenn,
vielen Dank. Dein Code funktioniert. Ich werde auch deine zwei Ratschläge in Zukunft beachten.
Schönen Sonntag noch. Vielen Dank
Peet
AW: XML Parsing Probleme
14.08.2022 18:17:19
Zwenn
Hallo Peet,
sehr gut, dass es für Dich funktioniert :-) Danke für die Rückmeldung.
Viele Grüße,
Zwenn

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige