Hallo Simon,
bin gestern nicht mehr dazu gekommen. Habe dir jetzt ein Makro erstellt, mit dem du beide Sprachen verarbeiten kannst. Du könntest sogar sehr einfach weitere Sprachversionen zufügen. Gäbe es in einer Datei unterschiedliche Sprachversionen, funktioniert das Makro trotzdem. Die Kommentare sollten für das Verständnis ausreichen.
Hinweis 1: XML ist Case Sensitive. Deshalb habe ich die beiden Tag-Namen DATA und DATEN auch im Quelltext in reinen Großbuchstaben geschrieben, genau so, wie in deinem XML Beispiel vorgegeben. Du kannst den "verschiedene Sprachen-Mechanismus" ggf. auch für andere Schreibweisen der Tagnamen verwenden.
Hinweis 2: Wähle für einen Test XML-Dateien mit wenigen Daten-Blöcken aus. Das Beipsiel gibt den Inhalt JEDES DATA- bzw. DATEN-Tags in einer eigenen MessageBox aus. Du kannst das natürlich auch einfach auf Debug.Print umstellen und die Ausgabe im Direktfenster kontrollieren.
Sub SensorDatenEinlesenAusXML()
Dim url As String
Dim xmlDocument As Object
Dim knotenAlleSensorDaten As Object
Dim knotenEinzelSensorDaten As Object
Dim einzelSensorDaten As String
Dim sprachenDurchgehen As Byte
'Speicherort der XML, kann auch online sein
'Soll diese Prozedur aus einer anderen aufgerufen werden,
'ist es sinnvoll die URL als Parameter zu übergeben. Dann
'könnten beliebig viele XML-Datein in einer Schleife
'abgearbeitet werden
url = "G:\Rest\Herber Forum\XML einlesen Englisch Deutsch - Simon\Messwerte.xml" '<--Anpassen
'XML-Dokument instanzieren und XML-Dokument einlesen
'Durch .async = False wird gewartet, bis die XML-Datei
'vollständig geladen wurde. Vor allem wichtig für
'Online-Zugriffe
Set xmlDocument = CreateObject("MSXML2.DOMDocument.6.0")
xmlDocument.async = False
xmlDocument.Load url
'Da die gewünschten Tagnamen auf Englisch und Deutsch vorliegen können, werden
'nacheinander beide Schreibweisen abgearbeitet. Dazu wird eine Zählschleife
'verwendet, die so oft durchlaufen wird, wie es Sprachversionen gibt (kann man
'an dieser Stelle beliebig erweitern)
'Die Sprachversionen selbst werden in einer Select Case Struktur eingelesen
'Da das Einlesen der Sensordaten für jede Sprache in die gleiche Objektvariable
'knotenAlleSensorDaten erfolgt, kann nach Select Case alles mit dem gleichen Code
'weiterverarbeitet werden
For sprachenDurchgehen = 0 To 1
Select Case sprachenDurchgehen
Case 0 'Englisch
'Sicherstellen, dass keine NodeCollection vorliegt
Set knotenAlleSensorDaten = Nothing
'Erstellen eine NodeCollection aus allen DATA-Tags
Set knotenAlleSensorDaten = xmlDocument.getElementsByTagName("DATA")
Case 1: 'Deutsch
'Sicherstellen, dass keine NodeCollection vorliegt
Set knotenAlleSensorDaten = Nothing
'Erstellen eine NodeCollection aus allen DATEN-Tags
Set knotenAlleSensorDaten = xmlDocument.getElementsByTagName("DATEN")
End Select
'Verarbeitung der NodeCollection
If Not knotenAlleSensorDaten Is Nothing Then
'Wenn eine NodeCollection gebildet werden konnte
'Alle Elemente durchgehen
For Each knotenEinzelSensorDaten In knotenAlleSensorDaten
'Sensordaten des aktuell bearbeiten XML-Tags in String schreiben
einzelSensorDaten = knotenEinzelSensorDaten.Text
'Hier den aktuellen String verarbeiten
'Sichtkontrolle für Beispielcode
MsgBox einzelSensorDaten
Next knotenEinzelSensorDaten
End If
Next sprachenDurchgehen
'Aufräumen
Set xmlDocument = Nothing
Set knotenAlleSensorDaten = Nothing
Set knotenEinzelSensorDaten = Nothing
End Sub
Viele Grüße,
Zwenn
|