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




