Thema Datum  Von Nutzer Rating
Antwort
24.07.2019 15:27:56 Simon
NotSolved
24.07.2019 16:25:09 Gast9684
NotSolved
24.07.2019 16:32:37 Simon
NotSolved
24.07.2019 16:55:48 Gast76546
NotSolved
25.07.2019 10:43:54 Simon
NotSolved
Blau Cases bei Nodes einer XML unterscheiden
25.07.2019 11:21:30 Gast38037
*****
Solved
25.07.2019 12:28:14 Gast6678
Solved
25.07.2019 12:42:56 Simon
NotSolved
25.07.2019 12:49:12 Gast27235
NotSolved

Ansicht des Beitrags:
Von:
Gast38037
Datum:
25.07.2019 11:21:30
Views:
621
Rating: Antwort:
 Nein
Thema:
Cases bei Nodes einer XML unterscheiden

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


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
24.07.2019 15:27:56 Simon
NotSolved
24.07.2019 16:25:09 Gast9684
NotSolved
24.07.2019 16:32:37 Simon
NotSolved
24.07.2019 16:55:48 Gast76546
NotSolved
25.07.2019 10:43:54 Simon
NotSolved
Blau Cases bei Nodes einer XML unterscheiden
25.07.2019 11:21:30 Gast38037
*****
Solved
25.07.2019 12:28:14 Gast6678
Solved
25.07.2019 12:42:56 Simon
NotSolved
25.07.2019 12:49:12 Gast27235
NotSolved