XSL
XSL (eXtensible Stylesheet Language) — семейство рекомендаций консорциума W3C, описывающее языки преобразования и визуализации XML-документов. Состоит из трех частей:
Основные отличия от CSS
Семейство XSLXSL-трансформацияС помощью XSL можно трансформировать XML-документ в любой вид, будь то HTML, WML, RTF, PDF, SQL или даже SWF (flash-запускаемый модуль), а также XSL. XSL несёт в себе информацию о том, как будет оформлен документ, где и как должны располагаться данные. Для того, чтобы обработать XML-документ c помощью XSL, необходимо в XML-документе написать следующую инструкцию: <?xml-stylesheet type="text/xsl" href="my-style.xsl"?>
XSLTЯзык XSLT состоит из 35 инструкций, все они имеют общий вид: <префикс:имя-инструкции [атрибут="значение" [атрибут="значение"]]>
</префикс:имя-инструкции>,
где XSLT-документ всегда является состоятельным (или валидным) 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>
Самым доступным XSLT-процессором на данный момент для Microsoft Windows является MSXML (поставляется с браузером Internet Explorer, начиная с версии 4.5), для систем на основе GNU — xsltproc. XSL-FOПример XSL-FO документа (взят из XSL Formatting Objects Tutorial): <?xml version="1.0" encoding="iso-8859-1"?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-name="my-page">
<fo:region-body margin="1in"/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="my-page">
<fo:flow flow-name="xsl-region-body">
<fo:block>Hello, world!</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>
ПримерыРекурсивный цикл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 < $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>
Результат:
Группировка и сортировка значений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="position()!=last()">
<xsl:text>, </xsl:text>
</xsl:if>
</xsl:for-each>
</BODY>
</HTML>
</xsl:template>
</xsl:stylesheet>
Результат:
См. такжеСсылки
|