XML JOIN pomocí XSLT aneb XSLT nad dvěma XML
Na podzim jsem řešil XML problém. Měl jsme dva XML soubory: jeden s exportem klasické DB tabulky a druhý s číselníkem. Potřeboval jsem k řádkům z prvního souboru zjistit pomocí cizího klíče odpovídající hodnotu z číselníku a na základě tohoto spojení vygenerovat opravný SQL skript, který se měl spustit ve zdrojové DB Oracle. A to vše nejlépe jako jednoduchou utilitku pro BFU.
Jenže jak na to? Pokud by oba soubory byly v normální DB, použil bych join; jenže teď jsou v XML. Import do Oracle DB není pro BFU ("My tu máme nějakou DB? Cože? Jaké přístupové údaje?"). Zvláštní XML DB a nad ní data spojovat taky není ono - to už nebude jednoduchá utilita. Stačila by jednoúčelová utilita, která by porovnávala hodnoty z obou souborů. A co takhle XSLT? To přece pracuje jenom nad jedním XML souborem. Omyl...
Vševěd Google opět nezklamal: XML databáze Ashpool, resp. její část libxslt, předpis doJoin.xsl, nic jiného jsem nepotřeboval. Přímo ve stylu si podle potřeb upravíte parametry a můžete transformovat. Ano, přes dvě XML.
Popis parametrů:
- datastore - umístění obou XML souborů, nad kterými se bude pracovat
- j1, j2 - vazební sloupce
- t1, t2 - názvy XML souborů
- type - typ vazby (inner / outer)
- dir - směr vazby (left /right), neimplementováno
<xsl:param name="datastore" select="'../'"></xsl:param>
...
<xsl:param name="t1" select="'ev-log-pars'"></xsl:param>
<xsl:param name="t2" select="'maps-pars'"></xsl:param>
...
Takže už jenom stačilo napsat jednoduchý javový prográmek, který spouštěl transformaci. V případě změny struktury stačí jen změnit XSLT soubor, bez potřeby spouštět IDE a nové kompilace.
Ashpool se mimochodem přestěhoval (resp. jeho web) a byl ukončen další vývoj této databáze. Na novém umístění zlobí download a hlavně tam nenajdete zdrojové kódy, takže je lepší používat starší verzi ze SourceForge, kde se přímo přes web dostanete ke zdroji v CVS.
Žádné komentáře:
Okomentovat
Poznámka: Komentáře mohou přidávat pouze členové tohoto blogu.