Kategorie-XML-Export mit Transformation

Wie Sie die Daten aus Access-Tabellen mithilfe von Abfragen in die gewünschten Form bringen, wissen Sie bereits. Dazu eignen sich beispielsweise Auswahl- oder Kreuztabellenabfragen. Sie können aber auch die Inhalte von XML-Dokumenten ganz nach Ihren Wünschen strukturieren. Alles, was Sie benötigen, ist eine passende Transformation. Die notwendigen Informationen landen in einer XSL-Datei und beschreiben, wie die Daten des XML-Dokuments ausgegeben werden sollen.

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Datenbank 1903_KategorieXMLExportMitTransformation.zip.

Einstiegsbeispiel

Im Artikel XML: Austausch mit Access-Bordmitteln haben wir einen Export in eine XML-Datei definiert, der die Daten der Tabellen tblKategorien und tblArtikel enthält. Das resultierende XML-Dokument enthält Elemente namens tblKategorien, die in Unterelementen die Feldinhalte der Felder dieser Tabelle enthalten sowie weitere Unterelemente namens tblArtikel, welche die Artikel der jeweiligen Kategorie inklusive aller Feldwerte auflistet. Das Ergebnis sieht in stark gekürzter Form etwa wie folgt aus:

<xml version="1.0" encoding="UTF-8">
<dataroot ...>
  <tblKategorien>
    <KategorieID>1</KategorieID>
    <Kategoriename>Getränke</Kategoriename>
    <Beschreibung>Alkoholfreie Ge ...</Beschreibung>
    <Abbildung>FRwvAAIAAAANAA4AFAAhAPAgS...</Abbildung>
    <tblArtikel>
      <ArtikelID>1</ArtikelID>
      <Artikelname>Chai</Artikelname>
      ...
    </tblArtikel>
    <tblArtikel>
      ...
    </tblArtikel>
    ...
  </tblKategorien>
  <tblKategorien>
    ...
  </tblKategorien>
</dataroot>

Wir möchten hier durch die Angabe einer XSL-Datei einige Änderungen an der Ausgabe erwirken. So soll etwa das Wurzelelement nicht dataroot heißen, sondern Bestellverwaltung. Die Elemente tblKategorien und tblArtikel sollen Kategorie und Artikel heißen. Außerdem soll der jeweilige Primärschlüsselwert nicht in einem eigenen Element namens KategorieID beziehungsweise ArtikelID landen, sondern in einem Attribut namens ID im jeweils übergeordneten Element Kategorie beziehungsweise Artikel. Außerdem wollen wir der Übersicht halber nur die Felder Kategoriename und Beschreibung der Tabelle tblKategorien sowie das Feld Artikelname der Tabelle tblArtikel als eigene Elemente in das XML-Dokument aufnehmen. Außerdem, das ist uns als Mensch im Gegensatz zur Maschine besonders wichtig, sollen die Elemente entsprechend der Hierarchie eingerückt dargestellt werden.

Das Ergebnis soll also etwa wie folgt aussehen:

<xml version="1.0" encoding="UTF-16">
<Bestellverwaltung ...>
  <Kategorie ID="1">
    <Kategoriename>Getränke</Kategoriename>
    <Beschreibung>Alkoholfreie Getränke, Kaffee, Tee, Bier</Beschreibung>
    <Artikel ID="1">
      <Artikelname>Chai</Artikelname>
    </Artikel>
    <Artikel ID="2">
      <Artikelname>Chang</Artikelname>
    </Artikel>
    ...
  </Kategorie>
  <Kategorie ID="2">
    ...
  </Kategorie>
  ...
</Bestellverwaltung>

Selektieren und Formatieren per XSL-Datei

Die XSL-Datei, die wir verwenden, sieht in der Übersicht wie in Listing 1 aus. Wir werden diese nun analysieren.

<xml version="1.0" encoding="ISO-8859-1"> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/TR/REC-html40"> 
   <xsl:template match="dataroot">
     <Bestellverwaltung>
       <xsl:text>
       </xsl:text>
       <xsl:for-each select="tblKategorien">
         <Kategorie>
           <xsl:attribute name="ID">
             <xsl:value-of select="KategorieID"/>
           </xsl:attribute>
           <xsl:text>
           </xsl:text>
           <Kategoriename>
             <xsl:value-of select="Kategoriename"/>
           </Kategoriename>
           <xsl:text>
           </xsl:text>
           <Beschreibung>
             <xsl:value-of select="Beschreibung"/>
           </Beschreibung>
           <xsl:text>
           </xsl:text>
           <xsl:for-each select="tblArtikel">
             <Artikel>
               <xsl:attribute name="ID">
                 <xsl:value-of select="ArtikelID"/>
               </xsl:attribute>
               <xsl:text>
               </xsl:text>
               <Artikelname>
                 <xsl:value-of select="Artikelname"/>
               </Artikelname>
               <xsl:text>
               </xsl:text>
           </Artikel>
           <xsl:text>
           </xsl:text>
           </xsl:for-each>
         </Kategorie>
         <xsl:text>
         </xsl:text>
       </xsl:for-each>
     </Bestellverwaltung>
   </xsl:template>
</xsl:stylesheet>

Listing 1: XSL-Datei zum Erreichen unserer Vorgaben

Es gibt grundsätzlich zwei verschiedene Typen von Zeilen: Diejenigen, die mit xsl: beginnen, enthaltenen Steueranweisungen. Diese werden ausgeführt, aber nicht in das Zieldokument übernommen. Die übrigen beginnen nicht mit xsl: und werden so, wie Sie in der XSL-Datei enthalten sind, in das Zieldokument geschrieben.

Möchten Sie weiterlesen? Dann lösen Sie Ihr Ticket!
Hier geht es zur Bestellung des Jahresabonnements des Magazins Access [basics]:
Zur Bestellung ...
Danach greifen Sie sofort auf alle rund 400 Artikel unseres Angebots zu - auch auf diesen hier!
Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:

Schreibe einen Kommentar