CardDavXmlUtilsTest.ktCardDavXmlUtils: Wurzelelement-Extraktion, Kontakt-ID-Parsing aus Multiget-Anfragen, XML-Elementnamen-/Wert-Extraktion mit Namespace-Unterstützung und XML-Entity-Escaping. Diese Hilfsfunktionen bilden das XML-Parsing-Rückgrat des CardDAV-Protokoll-Handlers.CardDavXmlUtils bietet leichtgewichtiges XML-Parsing ohne vollständigen DOM/SAX-Parser – mittels regex-basierter Extraktion für CardDAV-spezifische XML-Nutzlasten. Dieser Ansatz wurde gewählt, weil CardDAV-XML-Nutzlasten strukturell vorhersagbar (definiert durch RFCs 4918, 6352) und leistungskritisch sind.
Extrahiert den XML-Wurzelelementnamen aus einem String und behandelt dabei optionale XML-Deklaration (<?xml ... ?>) und Namespace-präfixierte Elemente (d:multistatus). Die Tests decken ab:
<d:multistatus xmlns:d="DAV:"> → multistatus<?xml version="1.0"?>, gibt multistatus zurückDies ist entscheidend für den PROPFIND/REPORT-Antwort-Handler, um basierend auf dem Wurzelelementtyp an den richtigen Antwort-Builder weiterzuleiten.
Parst einen CardDAV addressbook-multiget REPORT-Anfragekörper, um ProjectForge-Kontakt-IDs aus <d:href>-Elementen zu extrahieren. Tests parsen eine realistische XML-Nutzlast mit drei <d:href>{Pfad}/ProjectForge-{ID}.vcf</d:href>-Einträgen und verifizieren die korrekte Extraktion der IDs 7833476, 7858940, 7859171.
Die Methode verwendet Regex-Abgleich auf das ProjectForge-{ID}.vcf-Dateinamenmuster innerhalb von href-Elementen. Das Ergebnis ist eine Sequence<Int> (faule Auswertung via .toList()).
Findet ein benanntes Element in XML und gibt dessen qualifizierten Namen inklusive Namespace-Präfix zurück:
prop zurückd:prop zurückExtrahiert den Textinhalt eines benannten Elements aus XML und behandelt:
<etag> </etag> → " " (Leerzeichen bleiben erhalten)<etag /> → null (kein Textinhalt)<d:etag /> → null<d:sync-token>123456</d:sync-token> → 123456Escaped fünf XML-Sonderzeichen gemäß XML-1.0-Spezifikation:
< → <> → > (behandelt; Testeingabe enthält >)" → "& → &' → '<hurzel test="dkfsld"> & ' wird escaped zu <hurzel test="dkfsld"> & '.
Alle Tests verwenden Koltins let-Scope-Funktion mit rohen String-Literalen ("""...""") für XML-Testdaten. trimIndent() und trimMargin() werden verwendet, um mehrzeilige Testvorlagen zu bereinigen, während die XML-Struktur erhalten bleibt.
868d6abb7 2025 -> 2026 63081666f Quelltext-Dateiköpfe: 2024 -> 2025. 5167dab99 WIP: Carddav 6c1daac93 WIP: Carddav 0d7a81f91 WIP: Carddav dc3936193 WIP: Carddav (Thunderbird funktioniert, schreibgeschützt, inkl. Bilder usw.) caee35750 WIP: Carddav 2ad0cfe66 WIP: Carddav