WikiSort.ru - Программирование

ПОИСК ПО САЙТУ | о проекте

XSL (eXtensible Stylesheet Language) — семейство рекомендаций консорциума W3C, описывающее языки преобразования и визуализации XML-документов. Состоит из трех частей:

  • XSL Transformations (XSLT) — язык преобразований XML-документов.
  • XSL Formatting Objects (XSL-FO) — язык разметки типографских макетов и иных предпечатных материалов.
  • XPath — язык путей и выражений, используемый в XSLT для доступа к отдельным частям XML-документа.

Основные отличия от CSS

  • CSS и XSL — принципиально разные технологии. Их области применения пересекаются лишь частично.
  • CSS-форматирование HTML-документа применяется браузером на клиентской стороне, а XSL-преобразование выполняется, как правило, на сервере, затем его результат отправляется в браузер клиента.
  • Языком, лежащим в основе XSL, является XML, а это означает, что XSL более гибок, универсален, и у разработчиков появляется возможность использования средств контроля за корректностью составления таких стилевых списков (используя DTD или схемы данных).

Семейство XSL

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

С помощью 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 инструкций, все они имеют общий вид:

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

где префикс — обычно «xsl», но могут использоваться и другие.

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>

xsl:stylesheet — корневой элемент для любого XSL-документа. В него могут быть вложены теги верхнего уровня (xsl:transform — устаревший синоним для 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:

 1 <?xml version="1.0"?>
 2 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 3 	<xsl:template match="root">
 4 		<HTML>
 5 			<BODY>
 6 				<xsl:call-template name="for">
 7 					<xsl:with-param name="i" select="1"/>
 8 					<xsl:with-param name="n" select="5"/>
 9 				</xsl:call-template>
10 			</BODY>
11 		</HTML>
12 	</xsl:template>
13 	<xsl:template name="for">
14 		<xsl:param name="i"/>
15 		<xsl:param name="n"/>
16 		<xsl:value-of select="$i"/>
17 		<xsl:if test="$i &lt; $n">
18 			<xsl:text>, </xsl:text>
19 			<xsl:call-template name="for">
20 				<xsl:with-param name="i" select="$i+1"/>
21 				<xsl:with-param name="n" select="$n"/>
22 			</xsl:call-template>
23 		</xsl:if>
24 	</xsl:template>
25 </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="position()!=last()">
						<xsl:text>, </xsl:text>
					</xsl:if>
				</xsl:for-each>
			</BODY>
		</HTML>
	</xsl:template>
</xsl:stylesheet>

Результат:

2006, 2005, 2003, 2001

См. также

Ссылки

Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".

Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.

Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .




Текст в блоке "Читать" взят с сайта "Википедия" и доступен по лицензии Creative Commons Attribution-ShareAlike; в отдельных случаях могут действовать дополнительные условия.

Другой контент может иметь иную лицензию. Перед использованием материалов сайта WikiSort.ru внимательно изучите правила лицензирования конкретных элементов наполнения сайта.

2019-2024
WikiSort.ru - проект по пересортировке и дополнению контента Википедии