XSL

XSL (Extensible Stylesheet Language) — расширяемый язык таблиц стилей.

  • Стилевые таблицы XSL позволяют определять оформление элемента в зависимости от его месторасположения внутри документа, то есть к двум элементам с одинаковым названием могут применяться различные правила форматирования.
  • Языком, лежащем в основе XSL, является XML, а это означает, что XSL более гибок, универсален и у разработчиков появляется возможность использования средства для контроля за корректностью составления таких стилевых списков(используя DTD или схемы данных)
  • Таблицы XSL не являются каскадными, подобно CSS, так как чрезвычайно сложно обеспечить "каскадируемость" стилевых описаний, или, другими словами, возможность объединения отдельных элементов форматирования путём вложенных описаний стиля, в ситуации, когда структура выходного документа заранее неизвестна и он создаётся в процессе самого разбора. Однако в XSL существует возможность задавать правила для стилей, при помощи которых можно изменять свойства стилевого оформления, что позволяет использовать довольно сложные приёмы форматирования.

Немного деталей

Разработчики XSL обычно не задумываются об использовании терминов XSL и XSLT. Ими часто обозначают одно и то же, исключение только в том, что термин XSL-T используют для определения процесса или машины-трансформера, а XSL - для исходных кодов.

XSL - трансформация

С помощью XSL можно трансформировать XML документ в любой вид, будь то HTML, WML, RTF, PDF, SQL, даже в SWF (flash запускаемый модуль), а так же в XML и XSL. XSL несёт в себе информацию о том, как будет оформлен документ, где и как должны располагаться данные.

Самой доступной XSL-T машиной на данный момент является Internet Explorer начиная с версии 4.5 и выше. Для того, чтобы обработать XML документ c помощю XSL, необходимо в XML документе написать следующую инструкцию:


<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="my-style.xsl"?>
<root>
   < !-- ... -- >
</root>


XSL

Язык XSL состоит из трёх с половиной десятков инструкций, все они имеют общий вид:

<пространство-имен:имя-инструкции [атрибут="значение" [атрибут="значение"]]>
</пространство-имён:имя-инструкции>,

где пространство-имен обычно "xsl", но могут использоваться и другие.

XSL документ всегда является состоятельным(или валидным) XML документом и имеет следующую структуру:


<?xml version="1.0"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
        <xsl:template match="/">
                < !-- набор инструкций -- >
        </xsl:template>
        < !-- ... -- >
</xsl:stylesheet>

xsl:stylesheet - является корневым элементом для любого XSL документа. В него могут быть вложены теги верхнего уровня. (xsl:transform - устаревший синоним для xsl:stylesheet)

Секреты мастерства

Итерационный цикл

XML:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="for.xsl"?>
<root/>

for.xsl:

<?xml version="1.0"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="root">
        <HTML>
           <BODY>
                <xsl:call-template name="for">
                    <xsl:with-param name="i" select="1"/>
                    <xsl:with-param name="n" select="5"/>
                </xsl:call-template>
           </BODY>
        </HTML>
    </xsl:template>
        
    <xsl:template name="for">
        <xsl:param name="i"/>
        <xsl:param name="n"/>
        <xsl:value-of select="$i"/>
        <xsl:if test="$i &lt; $n">
           <xsl:text>, </xsl:text>
           <xsl:call-template name="for">
                <xsl:with-param name="i" select="$i+1"/>
                <xsl:with-param name="n" select="$n"/>
           </xsl:call-template>
        </xsl:if>
   </xsl:template>
</xsl:stylesheet>

Результат:

1, 2, 3, 4, 5 

Группировка и сортировка годов

XML:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="years.xsl"?>
<root>
   <object year="2003"/>
   <object year="2001"/>
   <object year="2005"/>
   <object year="2005"/>
   <object year="2003"/>
   <object year="2006"/>
   <object year="2006"/>
   <object year="2006"/>
   <object year="2005"/>
   <object year="2001"/>
</root>

years.xsl:

<?xml version="1.0"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
        
    <xsl:key name="years" match="/root/object" use="@year" />

    <xsl:template match="root" priority="-1">
        <HTML>
            <BODY>
                <xsl:for-each select="object[generate-id()=generate-id(key('years',@year))]">
                    <xsl:sort select="@year" order="descending"/>

                    <xsl:value-of select="@year" />
                    <xsl:if test="not(position()=last())">
                        <xsl:text>, </xsl:text>
                    </xsl:if>
                </xsl:for-each>
            </BODY>
        </HTML>
   </xsl:template>
</xsl:stylesheet>

Результат:

2006, 2005, 2003, 2001
 
Начальная страница  » 
А Б В Г Д Е Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ы Э Ю Я
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
0 1 2 3 4 5 6 7 8 9 Home