Co budeme potřebovat:
- Saxon 6.5 (pro XSLT 1.0) nebo Saxon 9.1 (pro XSLT 2.0) třeba z http://saxon.sourceforge.net
- vlastní xml soubor, který chceme překládat
- transformace, kterou budeme překládat xml soubor
- chceme zavolat java metodu, tak java třídu
Vytvoříme si adresářovou strukturu:
/
Src - kde budou zdrojový soubory
Tools - kde budou nástroje
|
|-- preprocessors - balík s java třídami
|-- xslt - kde budou transfomace
|-- saxon_6.5.5 - kde bude saxon
Vytvoříme si java třídu a transformaci. Předpokládejme, že v třídě je statická metoda, která se jmenuje getNum() - vrátí nám nějaké číslo, třeba číslo 2 (třídu si před použitím musíme přeložit, tak aby na daném místě byl class soubor).
Zdrojový soubor xml:
<?xml version="1.0" encoding="UTF-8"?>
<mutag>
<javatag />
</mutag>
Transformace bude vypadat následovně:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:proc="preprocessors.TestClass"
exclude-result-prefixes="proc"
>
<xsl:template match="javatag">
<para><xsl:value-of select="proc:getNum()" /></para>
</xsl:template>
</xsl:stylesheet>
Za zmínku stojí xmlns:proc - kde se odkazujeme na daný balík s danou třídou (místo prefixu proc můžete použít cokoli třeba oblíbené foo :-)). A následně samotné zavolání funkce .
A teď to vše uvedeme do chodu. Uďěláme si dávkový soubor - "baťák".
@echo offSET CLASSPATH=.\saxon_6.5.5\saxon.jar;.
REM SET CLASSPATH=.\saxon_9.1\saxon9.jar;.
REM saxon v6.5.5
@java com.icl.saxon.StyleSheet -o javaCallResult.xml ..\Src\javaCall.xml xslt\preprocessor.xsl
REM saxon v9.1
REM @java net.sf.saxon.Transform -o javaResult.xml ..\Src\javaCall.xml xslt\preprocessor.xsl
@echo on
Povšiměte si voláme Saxon ne přes Jar soubor, ale přes třídu. Přes jar soubor se mi to nepodařilo zprovoznit (v dávkovém souboru vidíte zakomentovaný příklad i pro Saxon 9.1).
Výsledkem je tedy javaCallResult.xml soubor který obsahuje pouze 2.
Pokud by Vám příklad nefungoval stahněte si celou ukázku.
Spoluautorem ukázky je Martin Augusta, kterému děkuju za spolupráci.
Žádné komentáře:
Okomentovat