XML File Toolbox -- Die Power von XML!

Warum XML? Mehr als nur Konfigurationsdateien! 🚀

In INI-Helper haben wir uns INI-Dateien angeschaut -- eine einfache und bewährte Lösung für Konfigurationsmanagement. Jetzt wird es Zeit für die nächste Stufe: 

XML-Dateien!

Ja, INI-Dateien sind großartig für einfache Einstellungen. Aber sobald deine Anwendung wächst, stößt du schnell an Grenzen:

  • Keine hierarchischen Strukturen (nur Sektion → Key → Wert)
  • Keine Datenvalidierung
  • Eingeschränkte Unterstützung für internationale Zeichen
  • Nicht geeignet für komplexe Datenstrukturen

Hier kommt XML ins Spiel!

XML: Nicht nur für Konfigurationen

XML ist viel vielseitiger als INI. Klar, du kannst es für Konfigurationen verwenden -- aber das ist erst der Anfang:    

  • Hierarchische Datenstrukturen: Perfekt für verschachtelte Konfigurationen, Kataloge oder Produktdatenbanken
  • UTF-8-Unterstützung: Alle Sprachen, Sonderzeichen und sogar Emojis -- kein Problem!
  • Datenaustausch: XML ist der Standard für Systemintegration
  • Validierung: Struktur und Inhalt mit Schemas prüfen
  • Eingebaut: MSXML ist in jeder Windows-Installation verfügbar

Mein Fazit: INI für einfache Fälle, XML wenn du Power und Flexibilität brauchst!

 

🎯 Die komplette XML File Toolbox -- 13 Power-Funktionen!

Ich habe eine umfassende VBA-Bibliothek entwickelt, die INI-ähnliche Einfachheit mit der Power von XML bietet. Alle Funktionen nutzen Late Binding (keine Referenzen nötig) und funktionieren in allen Access-Versionen (32/64-Bit).


📖 1. XML_ReadValue - Werte auslesen

Die Basis-Funktion für das Lesen von Konfigurationswerten.
strBackendPath = XML_ReadValue(strXmlPath, "Database", "BackendPath", "")


✍️ 2. XML_WriteValue - Werte schreiben/aktualisieren

Speichert Werte in der XML-Datei. Erstellt automatisch Datei und Sektion, falls nicht vorhanden! Sonderzeichen werden automatisch escaped.
XML_WriteValue strXmlPath, "Database", "BackendPath", strSelectedPath


🖨️ 3. XML_PrintAll - Komplette Datei ausgeben

Zeigt den gesamten Inhalt formatiert im Immediate Window -- perfekt für Debugging!
XML_PrintAll CurrentProject.Path & "\config.xml"


📋 4. XML_GetSections - Alle Sektionen auflisten

Gibt eine Collection aller Sektionen zurück.
Set colSections = XML_GetSections(strXmlPath)  
For Each varSection In colSections
     Debug.Print "Gefundene Sektion: " & varSection  
Next


🔑 5. XML_GetKeys - Alle Keys einer Sektion

Perfekt für dynamische Verarbeitung aller Einstellungen.
Set colKeys = XML_GetKeys(strXmlPath, "Database")  
For Each varKey In colKeys
     Debug.Print varKey & " = " & XML_ReadValue(strXmlPath, "Database", CStr(varKey))  
Next

 

🗑️ 6. XML_DeleteSection - Ganze Sektion löschen

Entfernt einen kompletten Konfigurationsbereich.
If XML_SectionExists(strXmlPath, "OldModule") Then
     XML_DeleteSection strXmlPath, "OldModule"  
End If


❌ 7. XML_DeleteKey - Einzelnen Key löschen

Löscht spezifische Einstellungen.
XML_DeleteKey strXmlPath, "Session", "TempPassword"


✔️ 8. XML_SectionExists - Sektion prüfen

Prüft, ob ein Konfigurationsbereich existiert.
If Not XML_SectionExists(strXmlPath, "DatabaseV2") Then ...


✅ 9. XML_KeyExists - Key prüfen

Checkt, ob ein spezifischer Wert vorhanden ist.
If Not XML_KeyExists(strXmlPath, "Features", "AutoBackup") Then
     XML_WriteValue strXmlPath, "Features", "AutoBackup", "True"  
End If


🏗️ 10. XML_PrintStructured - Strukturierte Ausgabe

Zeigt die XML hierarchisch organisiert -- ideal für Dokumentation!
XML_PrintStructured strXmlPath


📦 11. XML_GetAllValues - Dictionary aller Werte

Holt alle Key-Value-Paare einer Sektion als Dictionary -- super effizient!
Set dictDB = XML_GetAllValues(strXmlPath, "Database")  
Debug.Print "Server: " & dictDB("Server")  
Debug.Print "Port: " & dictDB("Port")  
Debug.Print "Timeout: " & dictDB("Timeout")


🔍 12. XML_ValidateFormat - Format validieren

Prüft die XML-Datei auf Fehler: fehlerhaftes XML, doppelte Keys, fehlende Attribute.
If Not XML_ValidateFormat(strImportedXmlPath) Then
     MsgBox "Die importierte Konfiguration ist fehlerhaft!", vbCritical  
End If

Validation Checks:

  • Datei existiert und ist lesbar
  • XML ist wohlgeformt (korrekte Syntax)
  • Keine doppelten Sektionen
  • Keine doppelten Keys innerhalb einer Sektion
  • Alle Sektionen und Keys haben Namen


🔄 13. XML_Compare - Zwei XML-Dateien vergleichen

DER HAMMER für Versionierung und Migrations-Management!
If Not XML_Compare(strOldConfig, strNewConfig) Then
     Debug.Print "Änderungen erkannt - siehe Details im Immediate Window”
End If

Perfekt für:

📊 Versions-Vergleich nach Updates
🔍 Fehlersuche bei Konfigurationsproblemen
📝 Dokumentation von Änderungen
⚠️ Warnung bei kritischen Abweichungen  


🌍 Real-World Use Cases -- Über Konfigurationen hinaus

Use Case 1: Multi-Backend-Unterstützung (Klassisch)

XML_WriteValue strXmlPath, "Backends", "Production", "\\Server\DB\Prod.accdb" 
XML_WriteValue strXmlPath, "Backends", "Test", "\\Server\DB\Test.accdb"  
XML_WriteValue strXmlPath, "Backends", "Development", "C:\Dev\DB.accdb"  
XML_WriteValue strXmlPath, "Settings", "CurrentEnvironment", "Production"


Use Case 2: Produktkatalog mit hierarchischer Struktur

XML ist perfekt für verschachtelte Daten! Beispiel: Ein Produktkatalog mit Kategorien, Produkten und Attributen.         
<?xml version="1.0" encoding="UTF-8"?> 
 <Product>
      <Section name="Electronics">
          <Key name="Laptop_001">Dell XPS 15, €1499, 16GB RAM</Key>
          <Key name="Laptop_002">MacBook Pro, €2299, 32GB RAM</Key>
          <Key name="Phone_001">iPhone 15, €999, 256GB</Key>
      </Section>
      <Section name="Books">
          <Key name="Programming_001">Clean Code, €35.99</Key>
          <Key name="Programming_002">Design Patterns, €42.50</Key>
      </Section> 
 </Product>


Use Case 3: Export-Vorlagen für Reports

Export-Einstellungen (Header, Formate, Filter) in XML speichern und dynamisch laden.
XML_WriteValue strXmlPath, "ReportVorlage_Verkauf", "Titel", "Monatlicher Verkaufsbericht"
XML_WriteValue strXmlPath, "ReportVorlage_Verkauf", "DatumsFormat", "TT.MM.JJJJ"
XML_WriteValue strXmlPath, "ReportVorlage_Verkauf", "Spalten", "Datum,Kunde,Betrag,Status"
XML_WriteValue strXmlPath, "ReportVorlage_Verkauf", "Sortierung", "Betrag DESC"


Use Case 4: User-spezifische Einstellungen mit UTF-8

Perfekt für internationale Anwendungen! Alle Sonderzeichen funktionieren einwandfrei.
XML_WriteValue strXmlPath, "UI", "Language", "DE"  
XML_WriteValue strXmlPath, "UI", "Theme", "Dark"  
XML_WriteValue strXmlPath, "UI", "BegrüßungsText", "Willkommen zurück, Müller!"  
XML_WriteValue strXmlPath, "Export", "StandardOrdner", "C:\Benutzer\Marcus\Exporte"

Use Case 5: Systemintegration über XML

Daten mit anderen Systemen austauschen, die XML-Format erwarten (z.B. Webservices, ERP-Systeme). Die Funktionen erstellen automatisch valides, wohlgeformtes XML, das andere Systeme lesen können!


✨ Die Vorteile auf einen Blick

✅      Update-sicher: XML bleibt bei Frontend-Updates erhalten
✅      UTF-8-Unterstützung: Alle Sprachen und Sonderzeichen funktionieren perfekt
✅      Robust: MSXML -- seit Jahrzehnten bewährt
✅      Universal: Standard-Format für Datenaustausch
✅      Hierarchisch: Unterstützung für komplexe, verschachtelte Strukturen
✅      32/64-Bit: Funktioniert in allen Access-Versionen
✅      Keine Abhängigkeiten: Nur MSXML (Late Binding), keine Referenzen nötig
✅      Auto-Escaping: Sonderzeichen (&, <, >, ", ') automatisch behandelt


⚠️ Wichtig: Sonderzeichen-Behandlung

Das Modul escaped automatisch alle Sonderzeichen. Du musst dich nicht darum kümmern!

Automatische Behandlung: 
XML_WriteValue strXmlPath, "Test", "Ampersand", "A & B"    ' Wird als "A & B" gespeichert und als "A & B" zurückgelesen  
XML_WriteValue strXmlPath, "Test", "Anführungszeichen", "Er sagte "Hallo""      '  Automatisch escaped, keine Probleme!


🔮 Was kommt als Nächstes? 

In der nächsten Folge dieser Serie, werde ich ähnliche Tools vorstellen, welche daten im .yml Format speichert, schreibt und ausliest.


🧪 Einfach ausprobieren

Anhand meiner kleinen Testing-Form könnt ihr die Funktionen direkt ausprobieren. Das macht es einfach, die Funktionen Schritt für Schritt kennenzulernen .

Du entwickelst viel mit Access? Dann probier’s aus – ich freu mich auf dein Feedback oder Ideen für weitere Funktionen! 🚀



Die ausführliche Beschreibung und alle Hinweise findet ihr direkt im Code – wie gewohnt gut dokumentiert.


   DOWNLOAD  
Version: 1.0  18.12.2025


Wenn du es hilfreich findest und seinen Wert anerkennst, würde ich mich über eine kleine Spende freuen, die den Aufwand und den Nutzen widerspiegelt, den es dir bietet. PayPal Eine kleine Spende