Pierwszeństwo szablonów xsl
Mam 2 Szablony
<template match="vehicle_details[preceding-sibling::vehicle_type = '4x4']/*">
...
</xsl:template>
<xsl:template match="vehicle_details[descendant::color = 'red']/*" >
...
</xsl:template>
Moje pytanie brzmi: który szablon będzie miał pierwszeństwo przy transformacji. A może mi ktoś podać przegląd / zasoby dotyczące pierwszeństwa szablonów XSL?
Z góry dzięki! 22
1 answers
Proces pełnej rozdzielczości jest opisany w sekcja 5.5 specyfikacji XSLT .
Ogólnie, następujące zasady mają zastosowanie w kolejności (np. szablon wyeliminowany z rozpatrzenia z powodu niższego pierwszeństwa importu jest wyeliminowany na stałe, niezależnie od jego priorytetu):
- zaimportowane szablony mają niższy priorytet niż szablony w głównym arkuszu stylów
- szablony z wyższą wartością w atrybucie
priority
mają wyższy priorytet - Szablony bez atrybutu
priority
przypisany jest domyślny priorytet. Szablony z bardziej szczegółowymi wzorami mają pierwszeństwo. - jest to błąd, jeśli poprzednie trzy kroki pozostawiają więcej niż jeden szablon w rozważeniu, ale procesory XSLT mogą odzyskać, domyślając się do ostatniego w pliku.
W twoim konkretnym przypadku oba szablony mają ten sam priorytet, więc stosuje się #4 powyżej. Aby wykazać:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match=
"vehicle_details[preceding-sibling::vehicle_type = '4x4']/*">
template1
</xsl:template>
<xsl:template match="vehicle_details[descendant::color = 'red']/*">
template2
</xsl:template>
</xsl:stylesheet>
Zastosowane do tego wejścia (oba szablony "dopasowanie": {]}
<root>
<vehicle_type>4x4</vehicle_type>
<vehicle_details>
<color>red</color>
</vehicle_details>
</root>
Wyjście:
template2
Ale jeśli zamienimy kolejność szablonów:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="vehicle_details[descendant::color = 'red']/*">
template2
</xsl:template>
<xsl:template match=
"vehicle_details[preceding-sibling::vehicle_type = '4x4']/*">
template1
</xsl:template>
</xsl:stylesheet>
Następnie wyjście to:
template1
41
Author: Wayne Burkett,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-19 02:43:02
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-19 02:43:02