XML-Export: CDATA

Wenn Sie ein Abonnement des Magazins 'Access im Unternehmen' besitzen, können Sie sich anmelden und den kompletten Artikel lesen.
Anderenfalls können Sie das Abonnement hier im Shop erwerben.

XML-Export: CDATA

In der vorherigen Ausgabe haben wir uns ausführlich mit dem Export von Tabellendaten in XML-Dokumente beschäftigt. Dabei haben wir zum Formen der Ausgabe auch Gebrauch von .xslt-Dateien gemacht, die Anweisungen zur Aufbereitung der Inhalte enthalten. In den Beiträgen haben wir uns noch keine Gedanken um den Export von Inhalten aus Text- oder Memofeldern gemacht, die als CDATA markiert werden sollen. Was CDATA überhaupt ist und wie Sie Ihre Daten als solche markieren, zeigt dieser Beitrag.

Die beiden Beiträge, in denen wir uns um den Export von Daten aus Access-Tabellen in XML-Dateien gekümmert haben, heißen XML-Export ohne VBA (www.access-im-unternehmen.de/1045) und XML-Export mit VBA (www.access-im-unternehmen.de/1046). Hier haben wir beispielsweise die Tabelle tblKategorien, deren Werte aus den Feldern Beschreibung (Memo) und Abbildung (OLE-Objekt) gegebenenfalls einfach in herkömmliche XML-Elemente geschrieben wurden – also etwa so:

<?xml version="1.0" encoding="UTF-8"?>
<dataroot xmlns:od="urn:schemas-microsoft-com:officedata" 
                           generated="2016-09-04T17:33:45">
   <tblKategorien>
     <KategorieID>1</KategorieID>
     <Kategoriename>Getränke</Kategoriename>
     <Beschreibung>Alkoholfreie Getränke, Kaffee, Tee, 
                                        Bier</Beschreibung>
   </tblKategorien>
   ...
</dataroot>

Unser Ziel ist aber nun, den Inhalt des Feldes Beschreibung wie folgt im XML-Dokument zu speichern:

<Beschreibung><![CDATA[Alkoholfreie Getränke, Kaffee, Tee, Bier]]></Beschreibung>

Innerhalb des Beschreibung-Elements sollen also noch ein öffnendes <![CDATA[ und ein schließendes ]]> um den Inhalt herum eingefügt werden.

Was aber ist CDATA überhaupt und was ist unser Nutzen, wenn wir den Inhalt des Elements damit einfassen? Gelegentlich kommt es vor, dass die in der Datenbank enthaltenen Zeichenketten auch Zeichen wie das Kleiner(<)- oder Größer-Zeichen(>) enthalten. Solange sich dieses in einem Feld einer Access-Tabelle befindet, machen diese keinen Ärger. Wenn Sie einen solchen Inhalt aber in ein XML-Dokument exportieren, dann würde dies als Element-Markup interpretiert werden. Wie Sie wissen, werden das Größer- und das Kleiner-Zeichen ja zum Markieren des Beginns und des Endes eines XML-Elements verwendet (...).

Taucht dann innerhalb dieser Markierungen im Inhalt eines dieser Zeichen auf, wird es nicht als Zeichen, sondern als neues Elementmarkup ausgewertet. Im folgenden Beispiel war jemand faul und hat statt des Wortes kleiner das Kleiner-Zeichen verwendet:

<b>Die Anzahl der Artikel dieser Kategorie ist < als die der übrigen Kategorien.

Soll dies nun in ein XML-Dokument exportiert werden, wird Folgendes daraus:

<b><Bes</b>chreibung>Die Anzahl der Artikel dieser Kategorie ist < als die der übrigen Kategorien.</Beschreibung>

Das Kleiner-Zeichen wird also automatisch durch < ersetzt, eine sogenannte HTML-Entität. Wenn das nicht geschehen würde, weil wir das XML-Dokument beispielsweise nicht über den eingebauten XML-Export erstellen, sondern per VBA, erhielten wir die folgende Zeile:

<b><Bes</b>chreibung>Die Anzahl der Artikel dieser Kategorie ist < als die der übrigen Kategorien.</Beschreibung>

Würden Sie diese Datei in einem XML-Editor öffnen, würde diese beispielsweise die Fehlermeldungen aus Bild 1 liefern. Das heißt also, dass wir entweder mit der Darstellung mit den Entitäten wie eben < für das Kleiner-Zeichen leben müssen oder aber den Inhalt als CDATA-Block ausgeben.

Fehlermeldungen beim Anzeigen einer XML-Datei mit unzulässigen Markupzeichen

Bild 1: Fehlermeldungen beim Anzeigen einer XML-Datei mit unzulässigen Markupzeichen

Anwendungsfälle für CDATA

Während es oft durch Zufall geschieht, dass ein Zeichen in einer Tabelle landet, das für die Ausgabe in ein XML-Dokument speziell behandelt werden muss, gibt es auch Anwendungsfälle, bei denen dies regelmäßig vorkommt. Wenn Sie etwa in einem Tabellenfeld den Inhalt eines XML-Dokuments selbst speichern und dieses als Teil eines XML-Dokuments exportieren wollen, sollten Sie dieses der Einfachheit halber einfach in einen CDATA-Block einfassen.

Ansatz mit Bordmitteln

Dies war die Leseprobe dieses Artikels.
Melden Sie sich an, um auf den vollständigen Artikel zuzugreifen.

Bitte geben Sie die Zeichenfolge in das nachfolgende Textfeld ein

Die mit einem * markierten Felder sind Pflichtfelder.

Ich habe die Datenschutzbestimmungen zur Kenntnis genommen.