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

Forumthread: XML Elemente auslesen

XML Elemente auslesen
21.04.2019 12:50:30
Marc
Frohe Ostern liebe Forumsgemeinde,
ich möchte aus einer wie folgt aufgebauten Zeile eines XML-Documents den Text ("128.011000") auslesen. Die einzige eindeutige Referenz auf welche ich mich beziehen kann ist "SDWS", also das was in der Zeile als coaCode bezeichnet ist.
lineItem coaCode="SDWS">128.011000
(Die kleiner/größer Zeichen am Anfang und Ende der Zeile musste ich aus Darstellungsgründen weg lassen.)
Nun muss dieser coaCode wohl ein Attribut dieses Childnode sein aber ich weiß nicht mit welchem Befehl ich mich auf diese Referenz beziehe wenn ich über alle Elemente mit dem TagName "lineItem" iteriere.
Welchem Attribut entspricht der coaCode?
Beste Grüße,
Marc
Anzeige

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: XML Elemente auslesen
21.04.2019 12:54:35
Marc
Entschuldigt bitte, mir gelingt es leider nicht, die XML-Codezeile vollständig darzustellen.
AW: XML Elemente auslesen
21.04.2019 14:08:14
Zwenn
Hallo Marc,
dann lade eine XML Datei als txt Datei hoch.
Deine Zeile hat das Tag lineItem und das Attribut coaCode mit dem Wert SDWS. Der Wert 128.011000 sieht für mich in der Darstellungsform aus, wie der Text des Knotens. Du müsstest also in etwa so dran kommen:

Dim knotenLineItem as Object
Dim textDesKnoten as String
set knotenLineItem = xmlDocument.getElementsByTagName("lineItem")(INDEX)
textDesKnoten = knotenLineItem.Text

Um gezielt auf bestimmte Knoten zuzugreifen müsste man Deine XML Datei kennen und am besten auch, was Du bisher an Code hast, um sie zu verarbeiten.
Viele Grüße,
Zwenn
Anzeige
AW: XML Elemente auslesen
21.04.2019 14:18:08
Marc
Hallo Zwenn,
hier findest Du den XML-Code als Textdatei:
https://www.herber.de/bbs/user/129303.txt
Ich würde als Referenz gerne die eindeutigste Referenz der jeweiligen Zeile verwenden und das ist das was in Gänsefüschen hinter coaCode steht. Ich bin mir nämlich nicht sicher inwiefern sich die Zeilen Nummern und damit ggf. der Index verändern wenn man zum Beispiel den Jahresabschluss einer anderen Company zieht.
Anzeige
AW: XML Elemente auslesen
21.04.2019 14:25:20
Marc
Noch eine kurze Anmerkung:
Ich möchte die richtige Zeile anhand des Attributs bzw. dessen Wert "SDWS" erkennen und mir daraufhin den Text des Elements anzeigen lassen aber so etwas wie "getElementsbyAttribute" habe ich im Objektkatalog nicht gefunden.
AW: XML Elemente auslesen
21.04.2019 15:26:50
Zwenn
Hallo Marc,
es gibt die Methode getAttribute(). Um die zu verwenden muss man aber alle Knoten durchlaufen, die man vorher in einer Node-Collection eingesammelt hat. An Deinen speziellen Wert kommst Du so:

Sub AttributWertXML()
'Variablen für den Dateizugriff und das DOM-Handling
Dim xmlDocument As Object
Dim knotenWurzel As Object
Dim knotenStamm As Object
Dim xmlDatei As String
Dim sdwsWert As String
xmlDatei = "G:\Rest\Herber Forum\XML bestimmten Wert an Attribut erkennen - Marc\129303.xml"
'XML-Dokument instanzieren und XML-Dokument einlesen
Set xmlDocument = CreateObject("MSXML2.DOMDocument.6.0")
xmlDocument.async = False
xmlDocument.Load xmlDatei
'Alle lineItem Tags in einer Node-Collection sammeln
Set knotenWurzel = xmlDocument.getElementsByTagName("lineItem")
If Not knotenWurzel Is Nothing Then
'Wenn es eine lineItem-Node-Collection gibt
'alle durchgehen, bis das Attribut coaCode
'den gewünschten Wert hat
For Each knotenStamm In knotenWurzel
If knotenStamm.getAttribute("coaCode") = "SDWS" Then
'SDWS gefunden, also speichern
sdwsWert = knotenStamm.Text
'Attributwert wurde gefunden, also Schleife verlassen
Exit For
End If
Next knotenStamm
Else
sdwsWert = "Keine lineItem-Tags gefunden"
End If
'Ergebnis ausgeben
MsgBox sdwsWert
'Aufräumen
Set xmlDocument = Nothing
Set knotenWurzel = Nothing
Set knotenStamm = Nothing
End Sub

Viele Grüße,
Zwenn
Anzeige
AW: XPath
21.04.2019 18:56:16
Fennek
Hallo,
auch wenn Zwenn's Lösung (wie immer) perfekt ist, wollte ich diese Gelegenheit nutzen mit MSXML die Variante "XPath" zu testen.

Sub XML_Extract()
'Debug.Print Dir(Pfad & "Test_XML.txt") ### Pfad ist definiert
f = "Test_XML.txt"
With CreateObject("MSXML2.DOMDocument")
.SetProperty "SelectionLanguage", "XPath"
.Load Pfad & f
Set ret = .SelectNodes("//lineItem[@coaCode='SDWS']")
For Each rr In ret
Debug.Print rr.nodename, rr.Text
Next rr
End With
End Sub
Hier werden alle (identischen) Werte ausgegeben.
mfg
(In Python und Selenium ist es üblich "XPath" zu nutzen)
Anzeige
AW: ! img !
26.04.2019 18:31:04
Fennek
Test: Text
AW: ! img !
26.04.2019 20:44:40
Fennek

Test: Text



Anzeige
AW: ! img !
27.04.2019 16:52:02
Fennek
Test: Text

AW: ! img !
27.04.2019 17:24:29
Mullit
Hallo Fennek,
was machst Du da für Sachen, willst Du uns Deine ersten Gehversuche in Java-Script unterschmuggeln oder was...!?...;-)
Gruß, Mullit
AW: ! img !
27.04.2019 18:28:28
Fennek
Hallo Mullit,
meine Java-Script - Kenntnisse sind völlig eingerosted, deshalb brachte so viele Versuche bis ich mich wieder an das ";" erinnerte. Ich halte es für ein Problem der Webseite und habe bereits eine email an Herrnn Herber geschrieben.
mfg
Anzeige
AW: iFrame
26.04.2019 18:34:18
Fennek
Test: Text

AW: XML Elemente auslesen
21.04.2019 22:29:36
Marc
Hallo Zwenn,
läuft wie geschmiert. Besten Dank für den Tipp. ;)
Beste Grüße,
Marc
;
Anzeige
Anzeige

Infobox / Tutorial

XML Elemente auslesen in Excel VBA


Schritt-für-Schritt-Anleitung

Um XML Daten in Excel mit VBA auszulesen, folge diesen Schritten:

  1. Erstelle ein neues Excel-Dokument und öffne die VBA-Entwicklungsumgebung (ALT + F11).

  2. Füge ein neues Modul hinzu: Klicke mit der rechten Maustaste auf "VBAProject (DeinDokumentName)" > Einfügen > Modul.

  3. Kopiere den folgenden Code in das Modul:

    Sub AttributWertXML()
       Dim xmlDocument As Object
       Dim knotenWurzel As Object
       Dim knotenStamm As Object
       Dim xmlDatei As String
       Dim sdwsWert As String
       xmlDatei = "Pfad\zu\deiner\Datei.xml" ' Ändere den Pfad zur XML-Datei
    
       Set xmlDocument = CreateObject("MSXML2.DOMDocument.6.0")
       xmlDocument.async = False
       xmlDocument.Load xmlDatei
    
       Set knotenWurzel = xmlDocument.getElementsByTagName("lineItem")
       If Not knotenWurzel Is Nothing Then
           For Each knotenStamm In knotenWurzel
               If knotenStamm.getAttribute("coaCode") = "SDWS" Then
                   sdwsWert = knotenStamm.Text
                   Exit For
               End If
           Next knotenStamm
       Else
           sdwsWert = "Keine lineItem-Tags gefunden"
       End If
    
       MsgBox sdwsWert
    
       Set xmlDocument = Nothing
       Set knotenWurzel = Nothing
       Set knotenStamm = Nothing
    End Sub
  4. Ändere den Pfad zu deiner XML-Datei im Code.

  5. Führe das Makro aus (F5) und du solltest den Text des Elements mit dem Attribut "coaCode" = "SDWS" erhalten.


Häufige Fehler und Lösungen

  • Fehler: "Keine lineItem-Tags gefunden"

    • Lösung: Überprüfe den Pfad zur XML-Datei und stelle sicher, dass die Datei korrekt geladen wird.
  • Fehler beim Ausführen des Makros

    • Lösung: Stelle sicher, dass die Microsoft XML-Bibliothek in den Verweisen aktiviert ist (Extras > Verweise > Microsoft XML, v6.0).

Alternative Methoden

Du kannst auch XPath verwenden, um gezielt auf XML-Elemente zuzugreifen. Hier ein Beispiel:

Sub XML_Extract()
    Dim xmlDoc As Object
    Set xmlDoc = CreateObject("MSXML2.DOMDocument")
    xmlDoc.Load "Pfad\zu\deiner\Datei.xml"

    xmlDoc.setProperty "SelectionLanguage", "XPath"
    Dim nodes As Object
    Set nodes = xmlDoc.SelectNodes("//lineItem[@coaCode='SDWS']")

    Dim node As Object
    For Each node In nodes
        Debug.Print node.nodename, node.Text
    Next node
End Sub

Diese Methode ist besonders nützlich, wenn du mit komplexeren XML-Strukturen arbeitest.


Praktische Beispiele

Hier sind einige praktische Beispiele, wie du XML Daten auslesen kannst:

  • Beispiel 1: Text eines Elements auslesen

    Verwende die Funktion getElementsByTagName, um den Text eines bestimmten Elements auszulesen.

  • Beispiel 2: Mehrere Attribute auslesen

    Wenn du mehrere Attribute aus verschiedenen lineItem-Elementen auslesen möchtest, kannst du eine Schleife verwenden, um alle Knoten zu durchlaufen.


Tipps für Profis

  • Nutze die Methode getElementsByAttribute (obwohl sie nicht direkt existiert, kannst du eine Schleife verwenden, um alle Attribute manuell zu überprüfen).
  • Wenn du mit Python arbeitest, kannst du die Bibliotheken xml.etree.ElementTree oder lxml verwenden, um XML Daten effizient auszulesen.
  • Überlege, die Python Userform zu nutzen, um eine benutzerfreundliche Oberfläche zur Verarbeitung von XML-Daten zu erstellen.

FAQ: Häufige Fragen

1. Wie kann ich XML Daten in Python einlesen?
Verwende die Bibliothek xml.etree.ElementTree und lade die XML-Datei wie folgt:

import xml.etree.ElementTree as ET

tree = ET.parse('deine_datei.xml')
root = tree.getroot()

2. Welche Version von Excel benötige ich für VBA XML?
Für die Verwendung von MSXML2 benötigst du mindestens Excel 2003 oder höher, da diese Versionen VBA unterstützen.

3. Was ist der Unterschied zwischen getElementsByTagName und getElementsByAttribute?
getElementsByTagName gibt alle Knoten mit einem bestimmten Tag zurück, während du getElementsByAttribute simulieren musst, indem du alle Knoten durchläufst und deren Attribute überprüfst.

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