Esempio 1 di <xsl:apply-imports>
L'esempio seguente mostra come usare <xsl:apply-imports> per riutilizzare il codice in modo più efficace. Nell'esempio vengono utilizzati quattro file principali.
Il file di origine XML, ops.xml. Questo file di dati definisce tre operazioni: add (+), sub (-) e mul (*).
Il foglio di stile XSLT principale, ops.xsl. Questo file contiene le regole di modello delle operazioni, inclusi due elementi <xsl:import>. I fogli di stile importati eseguono operazioni aritmetiche e operazioni sulle stringhe in una determinata origine dati.
Un foglio di stile importato, arith.xsl. Il file XSLT esegue operazioni aritmetiche su ogni elemento <op>.
Un altro foglio di stile importato, str.xsl. Questo file XSLT esegue operazioni personalizzate sulle stringhe. In questo caso add (+) viene considerato una concatenazione di stringhe. Ad esempio 1+2 diventa 12. Analogamente, mul (*) viene considerato una concatenazione inversa. 1*2 diventa 21. Si noti che sub (-) è un'operazione sulle stringhe non definita.
File XML (ops.xml)
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="ops.xsl"?>
<ops>
<desc>Some binary operations</desc>
<op name="add" symbol="+">
<operand>1</operand>
<operand>2</operand>
</op>
<op name="sub" symbol="-">
<operand>1</operand>
<operand>2</operand>
</op>
<op name="mul" symbol="*">
<operand>1</operand>
<operand>2</operand>
</op>
</ops>
File XSLT principale (ops.xsl)
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:import href="arith.xsl"/>
<xsl:import href="str.xsl"/>
<xsl:template match="op">
<xsl:value-of select="operand[1]"/>
<xsl:value-of select="@symbol"/>
<xsl:value-of select="operand[2]"/>
= <xsl:apply-imports/>
<br/>
</xsl:template>
</xsl:stylesheet>
File XSLT importato (arith.xsl)
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:template match="op[@symbol='+']">
<xsl:value-of select="sum(operand)"/> (from arith.xsl)
</xsl:template>
<xsl:template match="op[@symbol='-']">
<xsl:value-of select="number(operand[1])-number(operand[2])"/>
(from arith.xsl)
</xsl:template>
<xsl:template match="op[@symbol='*']">
<xsl:value-of select="number(operand[1])*number(operand[2])"/>
(from arith.xsl)
</xsl:template>
</xsl:stylesheet>
File XSLT importato (str.xsl)
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:template match="desc">
<DIV><xsl:value-of select="."/></DIV>
</xsl:template>
<xsl:template match="op[@name='add']">
<xsl:value-of select="operand[1]"/>
<xsl:value-of select="operand[2]"/> (from str.xsl)
</xsl:template>
<xsl:template match="op[@name='mul']">
<xsl:value-of select="operand[2]"/>
<xsl:value-of select="operand[1]"/> (from str.xsl)
</xsl:template>
</xsl:stylesheet>
Output
È necessario ottenere il seguente output:
Some binary operations
1+2 = 12 (from str.xsl)
1-2 = -1 (from arith.xsl)
1*2 = 21 (from str.xsl)
Note
L'ultimo foglio di stile importato ha la priorità di importazione maggiore. Nell'esempio seguente str.xsl è stato importato per ultimo, quindi ha una priorità di importazione maggiore rispetto a arith.xsl. Entrambi i fogli di stile importati dispongono di modelli per le operazioni add e mul. Vengono chiamati solo quelli del file str.xsl. Viene utilizzata anche l'operazione sub definita in arith.xsl, in quanto nel file str.xsl non è definita alcuna operazione sub. Si supponga di invertire l'ordine degli elementi <xsl:import> nel file XSLT principale nel modo seguente:
<xsl:import href="str.xsl"/>
<xsl:import href="arith.xsl"/>
In questo caso l'output sarà il seguente:
Some binary operations
1+2 = 3 (from arith.xsl)
1-2 = -1 (from arith.xsl)
1*2 = 2 (from arith.xsl)
Inoltre, se l'istruzione <xsl:apply-imports/> è assente dalla regola di modello che esegue l'override di <op> nel file XSLT principale ops.xsl), l'output sarà il seguente:
Some binary operations
1+2 =
1-2 =
1*2 =
Ovvero la regola di modello nel foglio di stile di importazione esegue l'override delle relative regole di modello dei fogli di stile importati. L'istruzione <xsl:apply-imports/> consente di riattivare in maniera diversa queste regole di modello sottoposte a override.