Live-Forum - Die aktuellen Beiträge
Datum
Titel
16.10.2025 17:40:39
16.10.2025 17:25:38
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

xml: alle child nodes eines parent nodes auslesen

Forumthread: xml: alle child nodes eines parent nodes auslesen

xml: alle child nodes eines parent nodes auslesen
19.07.2018 12:41:22
René
Hallo zusammen,
wie kann man per VBA in einem xml file alle untergeordneten Knoten eines Unterknotens auslesen?
Wenn man voraussetzt, dass man bereits weiß, dass man sich im Unterknoten 1B befindet, wie erhält man die Namen der Knoten Unterknoten 2B1 u. Unterknoten 2B2 sowie deren Text (2B1A, 2B1B) (s.u.)
Bsp. Struktur des xml files:
Hauptknoten: SektionA
Unterknoten 1A: Kunde1
Unterknoten 2A1: LandA
Unterknoten 2A2: LandB
Unterknoten 1B: Kunde2
Unterknoten 2B1: LandC
Text 2B1A: PreisX
Text 2B1B: GrößeY
Unterknoten 2B2: LandD
usw.
Gruß
René
Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: xml: alle child nodes eines parent nodes auslesen
19.07.2018 12:52:50
PeterK
Hallo
Excel kann XML importieren (DATEN - AUS ANDERER QUELLE - XML DATENIMPORT)
AW: xml: alle child nodes eines parent nodes auslesen
19.07.2018 13:21:37
René
Danke für die Info.
Die Knoten sollen per VBA direkt aus dem xml file ausgelesen werden, quasi für den User nicht sichtbar.
AW: xml: alle child nodes eines parent nodes auslesen
19.07.2018 13:48:09
PeterK
Hallo
Hab folgenden Code auf https://stackoverflow.com/questions/11305/how-to-parse-xml-using-vba gefunden und etwas modifiziert. Du musst in EXTRAS-VERWEISE-MICROSOFT XML V6.0 aktivieren.

Option Explicit
Public Sub LoadDocument()
Dim xDoc As MSXML2.DOMDocument60
Set xDoc = New MSXML2.DOMDocument60
xDoc.validateOnParse = False
If xDoc.Load("C:\Users\ich\Documents\test.xml") Then
' The document loaded successfully.
' Now do something intersting.
DisplayNode xDoc.ChildNodes, 0
Else
' The document failed to load.
' See the previous listing for error information.
End If
End Sub
Public Sub DisplayNode(ByRef Nodes As MSXML2.IXMLDOMNodeList, _
ByVal Indent As Integer)
Dim xNode As MSXML2.IXMLDOMNode
Indent = Indent + 2
For Each xNode In Nodes
If xNode.NodeType = NODE_TEXT Then
Debug.Print Space$(Indent) & xNode.ParentNode.nodeName & _
":" & xNode.NodeValue
End If
If xNode.HasChildNodes Then
DisplayNode xNode.ChildNodes, Indent
End If
Next xNode
End Sub

Anzeige
AW: xml: alle child nodes eines parent nodes auslesen
19.07.2018 14:09:55
René
wow, das sieht schon mal richtig gut.
vielen Dank dafür.
kann ich die Prozedur auch stoppen, wenn ich die Unterknoten nur des 1. Unterknoten (zum Hauptknoten) auslesen möchte?
Die Namen der Unterknoten der 2. Ebene möchte ich nämlich den Usern in einer UserForm zur Verfügung stellen.
Davon können sie dann wieder einen Auswählen und folglich wird der Inhalt des Knotens der 2. Ebene zur Verfügung gestellt.
Anzeige
AW: xml: alle child nodes eines parent nodes auslesen
19.07.2018 14:16:00
PeterK
Hallo
Kannst Du Deine XML Datei hochladen, damit ich auch sehen kann was Du genau vorhast
AW: xml: alle child nodes eines parent nodes auslesen
19.07.2018 14:34:07
René
Klar, sehr gerne. anbei das Bsp.
Wenn der User den Knoten "Customer_Deutschland" (über einen UserForm Dialog) auswähl benötige ich die Rückmeldung welche "Kd_ID_..." Knoten darunter enthalten sind.
Sollte der User im folgenden Dialog zB den Unterknoten "Kd_ID_Test7" ausgewählt haben, so müsste ich "Geschäft, Land, ID u. Anzahl_Kunden" auslesen können.
https://www.herber.de/bbs/user/122791.zip
Anzeige
AW: xml: alle child nodes eines parent nodes auslesen
19.07.2018 14:34:12
René
Klar, sehr gerne. anbei das Bsp.
Wenn der User den Knoten "Customer_Deutschland" (über einen UserForm Dialog) auswähl benötige ich die Rückmeldung welche "Kd_ID_..." Knoten darunter enthalten sind.
Sollte der User im folgenden Dialog zB den Unterknoten "Kd_ID_Test7" ausgewählt haben, so müsste ich "Geschäft, Land, ID u. Anzahl_Kunden" auslesen können.
https://www.herber.de/bbs/user/122791.zip
Anzeige
AW: xml: alle child nodes eines parent nodes auslesen
19.07.2018 15:21:09
PeterK
Hallo
Könnte in etwa so ausschauen

Option Explicit
Dim xDoc As MSXML2.DOMDocument60
Public Sub LoadDocument()
Set xDoc = New MSXML2.DOMDocument60
xDoc.validateOnParse = True
If xDoc.Load("C:\Users\ich\Downloads\child_nodes_of_parent_node.xml") Then
' The document loaded successfully.
Else
' The document failed to load.
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
Sub GetKD_ID_Info(myCustomer As String, myK_ID As String)
Dim oSeqNodes As IXMLDOMNodeList
Dim oSeqNode As IXMLDOMNode
Dim oSeqChild As IXMLDOMNode
Set oSeqNodes = xDoc.SelectNodes("//BrandData/" & myCustomer & "/" & myK_ID)
If oSeqNodes.Length = 0 Then
'show some message
Else
For Each oSeqNode In oSeqNodes
For Each oSeqChild In oSeqNode.ChildNodes
Debug.Print oSeqChild.nodeName, ":", oSeqChild.Text
Next
Next
End If
End Sub
Sub Finish()
Set xDoc = Nothing
End Sub
Sub RunXml()
LoadDocument
GetKD_ID "Customer_Deutschland"
GetKD_ID_Info "Customer_Deutschland", "Kd_ID_Test8"
Finish
End Sub

Anzeige
AW: xml: alle child nodes eines parent nodes auslesen
20.07.2018 07:45:29
René
VIELEN DANK für die sehr schnelle und perfekte Unterstützung!!
Das ist genau was ich benötige. Mit ein paar wenigen Anpassungen konnte ich den Code nahezu exakt übernehmen. Traumhaft!
Vlt. noch eine Frage: wissen Sie, ob es online ein gutes Tutorial zum Thema Excel-VBA-XML gibt, in dem man solche Inhalte wie von Ihnen geschrieben nachlesen kann?
Anzeige
AW: xml: alle child nodes eines parent nodes auslesen
20.07.2018 09:19:38
PeterK
Hallo
Schau Dir einmal dieses Buch an (ab Seite 100 gehts los mit XML). Da es sich nur um eine Vorschau handelt sind einzelne Seiten nicht verfügbar :-(
P.S. Author ist ein Namenskollege von Dir :-)

https://books.google.at/books?id=hNqhCwAAQBAJ&pg=PA127&lpg=PA127&dq=msxml2&source=bl&ots= _
gbPIFksNQq&sig=mTLSGpg1gfOj4de6Adb_A5tgmKA&hl=de&sa=X&ved=0ahUKEwiP1u_Qi63cAhXH2CwKHTgDClYQ6AEIUTAH#v=onepage&q&f=false

Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

XML: Alle Child Nodes eines Parent Nodes Auslesen mit VBA


Schritt-für-Schritt-Anleitung

Um alle Child Nodes eines bestimmten Parent Nodes in einer XML-Datei mithilfe von VBA auszulesen, befolge diese Schritte:

  1. Verweise aktivieren: Öffne den VBA-Editor (ALT + F11) und gehe zu Extras > Verweise. Aktiviere Microsoft XML, v6.0 (oder eine andere Version, je nach Bedarf).

  2. VBA Code erstellen: Nutze den folgenden VBA-Code, um die XML-Daten zu laden und die Child Nodes auszulesen:

    Option Explicit
    Dim xDoc As MSXML2.DOMDocument60
    
    Public Sub LoadDocument()
       Set xDoc = New MSXML2.DOMDocument60
       xDoc.validateOnParse = True
       If xDoc.Load("C:\Users\ich\Documents\deine_datei.xml") Then
           ' Die Datei wurde erfolgreich geladen.
           GetChildNodes "Unterknoten1B"
       Else
           ' Die Datei konnte nicht geladen werden.
           MsgBox "Fehler beim Laden der XML-Datei."
       End If
    End Sub
    
    Sub GetChildNodes(parentNodeName As String)
       Dim nodes As IXMLDOMNodeList
       Set nodes = xDoc.SelectNodes("//" & parentNodeName & "/*")
       Dim node As IXMLDOMNode
       For Each node In nodes
           Debug.Print node.nodeName & ": " & node.Text
       Next node
    End Sub
  3. Die Prozedur ausführen: Rufe die LoadDocument-Prozedur auf, um die XML-Datei zu laden und die Child Nodes auszulesen.


Häufige Fehler und Lösungen

  • Fehler beim Laden der XML-Datei: Stelle sicher, dass der Pfad zur XML-Datei korrekt ist und die Datei existiert.

  • Leere Node-Liste: Überprüfe den XPath-Ausdruck in der SelectNodes-Methode. Achte darauf, dass der Parent Node korrekt benannt ist.

  • Referenzfehler: Vergewissere Dich, dass die richtige Version von Microsoft XML aktiviert ist.


Alternative Methoden

Falls Du eine andere Methode bevorzugst, um XML-Daten in Excel zu verarbeiten, kannst Du auch die integrierte XML-Importfunktion von Excel verwenden:

  1. Gehe zu Daten > Aus anderer Quelle > XML-Datenimport.
  2. Wähle die XML-Datei aus und folge den Anweisungen im Dialogfeld.

Diese Methode ist besonders nützlich, wenn Du keine Programmierung in VBA vornehmen möchtest.


Praktische Beispiele

Hier ein einfaches Beispiel, wie Du alle Child Nodes eines spezifischen Kunden auslesen kannst:

Sub GetCustomerData()
    LoadDocument
    GetChildNodes "Customer_Deutschland"
End Sub

Wenn der User den Knoten "Customer_Deutschland" auswählt, wird die Prozedur GetChildNodes aufgerufen, um alle nachfolgenden Child Nodes auszugeben.


Tipps für Profis

  • Verwende Fehlerbehandlung: Implementiere On Error GoTo-Anweisungen, um besser mit Laufzeitfehlern umzugehen.

  • Optimierung des Codes: Wenn Du mit großen XML-Dateien arbeitest, überlege, ob Du eine effizientere Methode zur Verarbeitung der Daten benötigst, z.B. durch Streaming-Parser.

  • Nutzung von UserForms: Stelle sicher, dass Deine UserForms dynamisch die Nodes anpassen, basierend auf der Auswahl des Benutzers.


FAQ: Häufige Fragen

1. Wie kann ich die Child Nodes eines spezifischen Parent Nodes auslesen?
Nutze die SelectNodes-Methode mit dem korrekten XPath-Ausdruck, um gezielt die Child Nodes abzurufen.

2. Was ist der Unterschied zwischen IXMLDOMNode und IXMLDOMNodeList in VBA?
IXMLDOMNode repräsentiert einen einzelnen XML-Knoten, während IXMLDOMNodeList eine Sammlung von Knoten darstellt, die durch eine Abfrage zurückgegeben werden können.

3. Kann ich XML-Daten auch in MS Access verwenden?
Ja, MS Access bietet ebenfalls Möglichkeiten, XML-Daten zu importieren und zu verarbeiten, oft über den MS Access XML Parser.

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