Suche // Search:

01.07.2014

XML-Daten mit XSLT umwandeln
//
Transform XML Data with XSLT

Eine Anfrage eines Kunden hatte mich vor einiger Zeit auf das Thema XSLT (XSL Transformation) gebracht.
Ziel war es Daten in einer Excel-Datei zu pflegen, diese als XML-Datei zu exportieren und diese dann in ein XFA-Formular zu importieren.
XSLT war hier zwingend erforderlich, da Excel nur sehr flache XML-Strukturen unterstützt, die nicht zum Aufbau des XFA-Formulars passen wollten.

Generell bietet sich XSLT immer an wenn importierte/exportierte Daten umstrukturiert werden sollen.
XSLT erlaubt vielfältige Manipulationen, wie z.B. Attribute und Elemente hinzufügen, entfernen oder umbenennen.

Dieses Beispiel soll einmal die Möglichkeiten zeigen, die XSLT bei Verwendung einer Datenbindung mitbringt.


A while ago a customers request brought me to the topic XSLT in XFA forms.
The goal was to fill data in a Excel file, export those data as XML file and import it into a XFA form.
XSLT became neccessary because Excel only allows very plain XML structures that didn't fit the structure of the XFA form.

XSLT is always the first choice if you need to restructure the imported/exported data.
It allows a variety of manipulations as adding, removing or renaming attributes and elements.

In this example I would like to show what you can do with XSLT in a data connection.


1. Als Ausgang dient wieder eine Excel-Datei, in der man Kundendaten pflegt und dann als XML-Datei exportiert.
//
We're starting with an Excel file where we fill some customer data and export those as a XML file.
Excel-Datei mit XML-Zuordnung
//
Excel file with XML mapping

<!-- XML-Struktur aus Excel // XML structure from Excel --> <CustomerList>
    <Customer Firstname="String" Middlename="String" Lastname="String" Sex="String" Birthday="YYYY-MM-DD"/>
    <Info Address="String" ZIP="String" City="String"/>
    </Customer>
    ...
</CustomerList>

2. Das XFA-Formular, in das die Daten dann importiert werden sollen, hat in diesem Fall eine Datenbindung an ein Schema (XSD), das eine andere Struktur als die XML-Datei aufweist.
//
The XFA form has a data connection to a schema (XSD) with a different structure than the XML file we're going to import.

<!-- XML-Struktur in XFA-Formular // XML structure in XFA form -->
<MyCustomers>
  <Customer>
  <General>
   <FirstName>String</FirstName>
   <MiddleName>String</MiddleName>
   <LastName>String</LastName>
   <Gender>String</Gender>
   <BirthDay>YYYY-MM-DD</BirthDay>
  </General>
  <Address>
   <Street>String</Street>
   <ZipCode>String</ZipCode>
   <Town>String</Town>
  </Address>
  <Contact>
   <Phone>String</Phone>
   <Mobile>String</Mobile>
   <Email>String</Email>
  </Contact>
 </Customer>
  ...
</MyCustomers>


3. Damit die eingehenden (importierten) Daten dennoch korrekt zugewiesen werden, wird der Datenverbindung auch ein XSLT-Stylesheet zugewiesen, das die erforderliche Transformierung vornimmt.
Auch die ausgehenden (exportierten) Daten werden umgewandelt, sodass die XML-Datei ebenso eine andere Struktur aufweist.

//
To allow an correct assigment of the incomming (imported) data the data connection additionally uses a XSLT stylesheet to transform the data.
Also the outgoing (exported) data is transformed, so an exported XML file has a different structure too.
Datenverbindung mit XSLT
//
Data Connection with XSLT

<!-- XSLT-Stylesheet -->
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
 <xsl:template match="CustomerList">
  <MyCustomers>
   <xsl:comment>NOTE: XML data was transformed by XSLT during import to conform the embedded XML schema</xsl:comment>
   <xsl:variable name="Customer" select="Customer"/>
   <xsl:for-each select="$Customer">
    <xsl:variable name="Info" select="./Info"/>
    <Customer>
     <General>
      <FirstName>
       <xsl:value-of select="@Firstname"/>
      </FirstName>
      <MiddleName>
       <xsl:value-of select="@Middlename"/>
      </MiddleName>
      <LastName>
       <xsl:value-of select="@Lastname"/>
      </LastName>
      <Gender>
       <xsl:value-of select="@Sex"/>
      </Gender>
      <BirthDay>
       <xsl:value-of select="@Birthday"/>
      </BirthDay>
     </General>
     <Address>
      <Street>
       <xsl:value-of select="$Info/@Address"/>
      </Street>
      <ZipCode>
       <xsl:value-of select="$Info/@ZIP"/>
      </ZipCode>
      <Town>
       <xsl:value-of select="$Info/@City"/>
      </Town>
     </Address>
    </Customer>
   </xsl:for-each>
  </MyCustomers>
 </xsl:template>
</xsl:stylesheet>


Beispiel-Dateien
//
Sample files
https://files.acrobat.com/a/preview/509c0f0c-1a3c-4ce5-8f0e-0378f391ef0a

03.02.2014

Der Selbermachen-Bugfix 3
//
Do-It-Yourself bugfix 3

Neulich stieß ich auch das Problem, da ich im Designer keine Bilder mehr durch Doppelklicken eines Bildfeldes hinzufügen konnte.
Alles was ich zu Gesicht bekam, war die barsche Meldung: "Auf Ihrem System wurde kein Bilddatei-Browser gefunden.".

In den Optionen des Designers offenbarte sich das Problem, denn für die Dateiverwaltung war kein Dateibrowser vorhanden und auch nicht auswählbar.
Ursache ist das Fehlen eines Registrierungseintrages für den Dateibrowser den Designer mitbringt.

Abhilfe schaft hier ein kurzer Ausflug in die Windows Kommandozeile.


I recently got a problem in Designer where I wasn't able to add images by double clicking an image field.
All a got was a gruff message saying "Error: Unable to locate an image file browser on your system".

In Designers options dialog showed the dilemma. There wasn't a default file browser available and also not selectable.
The reason is a missing registry entry for the file browser that comes with Designer.

You can fix this with a short excursion into the Windows command line.


Bug – Fehlender Bilddatei-Browser
//
Bug – Missing image file browser


Fehlermeldung - Fehlender Bilddatei-Browser
//
Error - Missing image file browser
Fehlender Dateibrowser im Optionen-Dialog
//
Missing file browser in the options dialog

Selbermachen-Bugfix – Schritt für Schritt
//
Do-It-Yourself Bugfix – Step by Step


Schritt 1 – Öffnen Sie die Kommandozeile (cmd) mit Administrator-Rechten
//
Step 1 – Open the command line (cmd) with admin rights


Schritt 2 – Wechseln Sie mit "cd" das Installationsverzeichnis Ihres Designer z.B. "cd C:\Program Files (x86)\Adobe\Adobe LiveCycle Designer ES3"
//
Step 2 – Use "cd" to go to the Designers installation directory like "cd C:\Program Files (x86)\Adobe\Adobe LiveCycle Designer ES3"


Schritt 3 – Registrieren Sie den Dateibrowser mit dem Befehl "regsvr32.exe FileSystemBrowser.dll" neu.
//
Step 3 – Register the file browser with the command "regsvr32.exe FileSystemBrowser.dll".
Glückwunsch - Sie haben den Dateibrowser erfolgreich registriert
//
Congratulations - You successfully registered the file browser

Schritt 4 – Starten Sie Designer neu und prüfen Sie, ob der Dateibrowser unter "Extras" > "Optionen" wieder verfügbar ist.
//
Step 4 – Restart Designer and under "Tools" > "Options" check if the file browser is available again.