Elemento <xsl:template>
Definisce un modello riutilizzabile per la generazione dell'output desiderato per nodi di tipo o contesto particolare.
<xsl:template
name= QName
match = Criterio
priority = Numero
mode = QName
</xsl:template>
Attributi
name
Il Nomi completi (XSLT) da espandere. Se è presente un prefisso, questo viene espanso in un riferimento URI (Uniform Resource Identifier) utilizzando le dichiarazioni dello spazio dei nomi attivate sull'attributo in cui è presente il nome. Il nome espanso, costituito dalla parte locale del nome e possibilmente dal riferimento URI null, viene utilizzato come nome del modello. Lo spazio dei nomi predefinito non viene utilizzato per i nomi senza prefisso. Se un elemento <xsl:template> dispone di un attributo name può, ma non necessariamente deve, disporre anche di un attributo match.match
Un Modelli (XSLT) che identifica il nodo o i nodi di origine a cui viene applicata la regola. L'attributo match è obbligatorio a meno che l'elemento <xsl:template> non abbia un attributo name. Il contenuto dell'elemento <xsl:template> è il modello per cui è stata creata un'istanza quando viene applicata la regola di modello.priority
Il numero di priorità per il modello. Tutte le regole di modello corrispondenti con una priorità più bassa rispetto alle regole di modello corrispondenti con la priorità più alta non vengono tenute in considerazione. Il valore deve corrispondere a un numero reale compreso tra 0 e 9, positivo o negativo, corrispondente al numero di produzione con un segno meno (-) iniziale facoltativo. La priorità predefinita viene calcolata nel modo seguente:Se il pattern contiene più alternative separate da |, viene considerato allo stesso modo di un insieme di regole di modello, una per ciascuna alternativa.
Se il pattern ha la forma di un nome completo (QName) preceduto da uno specificatore di asse figlio o attributo o ha la forma di una rappresentazione formale di istruzione di elaborazione preceduta da uno specificatore di asse figlio o attributo, la priorità è 0.
Se il pattern è un nome preceduto da uno specificatore di asse figlio o attributo, la priorità è -0,25.
In caso contrario, se il pattern consiste in una verifica del nodo preceduta da uno specificatore di asse figlio o attributo, la priorità è -0,5.
In caso contrario, la priorità è 0,5.
In questo modo, il tipo di modello più comune (un modello che verifica un nodo con un tipo e un nome espanso particolari) ha priorità 0. Il successivo tipo di modello meno specifico (un modello che verifica un nodo con un tipo particolare e un nome espanso con un URI dello spazio dei nomi particolare) ha priorità -0,25. Pattern meno specifici di questo (pattern che verificano i nodi con tipi particolari) hanno priorità -0,5. Pattern più specifici del tipo di pattern più comune hanno prorità 0,5.
mode
Il valore del modo. Questo valore consente di elaborare più volte un elemento, producendo ogni volta un risultato diverso. Se <xsl:template> non ha un attributo match, non deve avere un attributo mode. Se un elemento <xsl:apply-templates> ha un attributo mode, può essere applicato solo alle regole di modello da elementi <xsl:template> che hanno un attributo mode con lo stesso valore. Se un elemento <xsl:apply-templates> non ha un attributo mode, può essere applicato solo alle regole di modello da elementi <xsl:template> che non hanno un attributo mode.
Informazioni sull'elemento
Numero di occorrenze |
Illimitato |
Elementi padre |
|
Elementi figlio |
xsl:apply-imports,xsl:apply-templates, xsl:attribute, xsl:call-template, xsl:choose, xsl:comment, xsl:copy, xsl:copy-of, xsl:element, xsl:fallback, xsl:for-each, xsl:if, xsl:message, xsl:number, xsl:param, xsl:processing-instruction, xsl:text, xsl:value-of, xsl:variable, elementi di output |
Note
Notare che non è necessario per il modello generare un documento XML completo (compreso il modello radice, a meno che non si utilizzi transformNodeToObject), ma è sufficiente un frammento di XML. È possibile includere il testo non incluso o più elementi documento definiti dal modello. Ciò semplifica la generazione di testo non elaborato e frammenti XML che possono essere ulteriormente elaborati da un'applicazione (ad esempio, frammenti HTML inseriti in una pagina HTML).
Il valore dell'attributo name è un nome completo espanso. Se è presente un prefisso, questo viene espanso in un riferimento URI utilizzando le dichiarazioni dello spazio dei nomi attivate sull'attributo in cui è presente il nome. Il nome espanso, costituito dalla parte locale del nome e possibilmente dal riferimento URI null, viene utilizzato come nome del modello. Lo spazio dei nomi predefinito non viene utilizzato per i nomi senza prefisso.
Se un elemento <xsl:template> dispone di un attributo name può, ma non necessariamente deve, disporre anche di un attributo match. Un elemento <xsl:call-template> richiama un modello in base al nome e dispone di un attributo obbligatorio name che identifica il modello da richiamare. Diversamente da <xsl:apply-templates>, <xsl:call-template> non modifica il nodo corrente o l'elenco dei nodi correnti.
Se un foglio di stile contiene più modelli con lo stesso nome, si verifica un errore.
Esempio
Questa regola di modello presenta un pattern che identifica elementi <stock> e genera un elemento di output <DIV> con l'attributo STYLE="font-weight:bold":
File XML (portfolio.xml)
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="templ.xsl"?>
<portfolio xmlns:dt="urn:schemas-microsoft-com:datatypes" xml:space="preserve">
<stock exchange="nyse">
<name>zacx corp</name>
<symbol>ZCXM</symbol>
<price dt:dt="number">28.875</price>
</stock>
<stock exchange="nasdaq">
<name>zaffymat inc</name>
<symbol>ZFFX</symbol>
<price dt:dt="number">92.250</price>
</stock>
<stock exchange="nasdaq">
<name>zysmergy inc</name>
<symbol>ZYSZ</symbol>
<price dt:dt="number">20.313</price>
</stock>
</portfolio>
File XSLT (templ.xsl)
<?xml version='1.0'?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="stock">
<DIV STYLE="font-weight:bold">
Symbol: <xsl:value-of select="symbol" />,
Price: <xsl:value-of select="price" />
</DIV>
</xsl:template>
</xsl:stylesheet>
Output
L'output formattato è il seguente:
Symbol: ZCXM, Price: 28.875
Symbol: ZFFX, Price: 92.250
Symbol: ZYSZ, Price: 20.313