Pokud potřebujeme data uložená v XML rychle převést do relační databáze, můžeme k tomu použít i XSLT. To umí generovat i textové soubory, není proto problém vytvořit styl pro vytváření série SQL příkazů.
Příklad 11.6. Převod XML do SQL – zam2sql.xsl
<?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="text" encoding="windows-1250"/> <xsl:strip-space elements="*"/> <xsl:template match="zamestnanec"> <xsl:text>INSERT INTO Zamestnanci (OsobniCislo, Jmeno, OCSefa) </xsl:text> <xsl:text>VALUES (</xsl:text> <xsl:value-of select="@oc"/> <xsl:text>, '</xsl:text> <xsl:value-of select="jmeno"/> <xsl:text>', </xsl:text> <xsl:choose> <xsl:when test="sef"> <xsl:value-of select="sef"/> </xsl:when> <xsl:otherwise> <xsl:text>NULL</xsl:text> </xsl:otherwise> </xsl:choose> <xsl:text>);
</xsl:text> </xsl:template> </xsl:stylesheet>
Po aplikování tohoto stylu na seznam zaměstnanců dostaneme následující dávku v SQL:
INSERT INTO Zamestnanci (OsobniCislo, Jmeno, OCSefa) VALUES (1164, 'Procházka Karel', 2021); INSERT INTO Zamestnanci (OsobniCislo, Jmeno, OCSefa) VALUES (1168, 'Novotná Alena', 2021); INSERT INTO Zamestnanci (OsobniCislo, Jmeno, OCSefa) VALUES (1230, 'Klíma Josef', 1168); INSERT INTO Zamestnanci (OsobniCislo, Jmeno, OCSefa) VALUES (1564, 'Pinkas Josef', 2021); INSERT INTO Zamestnanci (OsobniCislo, Jmeno, OCSefa) VALUES (2021, 'Kládová Adéla', NULL);
Ukázka je v zásadě funkční, ale má jeden problém. Pokud by jméno zaměstnance obsahovalo apostrof, bude tento apostrof beze změny vložen i do generovaného SQL kódu, kde tím pádem vznikne syntaktická chyba. V textových konstantách SQL se musí apostrof zdvojit. Pro zdánlivě jednoduchou úlohu nahrazení jednoho řetězce (apostrofu) jiným řetězcem (dvěma apostrofy) není v XSLT přímá podpora. Podobnou funkci samozřejmě můžeme naimplementovat jako rekurzivní šablonu, která potřebnou funkcionalitu složí z elementárních řetězcových funkcí XPathu.
Naštěstí se jedná o tak častý problém, že již byl mnohokrát vyřešen. Nemusíme si tedy sami psát žádný komplikovaný kód, stačí si z Internetu stáhnout hotovou knihovnu a použít ji v našem stylu. Jednou z takových volně dostupných knihoven je XSLT Standard Library.