XSL eXtensible Stylesheet Language суббота, 7 мая 2016 г. Общий принцип преобразований Структура документа XSL <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method ="html" media-type ="text/xml"/> <xsl:template match=“…"> <!-Определение шаблона --> </xsl:template> … </xsl:stylesheet> Атрибуты output method (XML, HTML или text) encoding media-type – задаёт MIME-тип (text/xml) doctype-system или doctype-public Например: <xsl:output doctype-system=“example.dtd”> формирует в выходном документе <!DOCTYPE root SYSTEM “example.dtd”> <xsl:output doctype-public=“-//W3C//DTD XHTML 1.0 Transitional//EN”> формирует в выходном документе <!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml/DTD/XHTML1-transitional.dtd”> Шаблоны <xsl:template match=“example”> <!-Определение шаблона, которое может включать в себя статическое содержимое, ссылки на шаблоны вложенных элементов, вставку значений элемента и его атрибутов --> </xsl:template> Применение шаблонов <xsl:template match=“example”> <html> <head> <title>example</title> </head> <body> <!--<xsl:apply-templates/>--> <xsl:apply-templates select=“child”/> </body> </html> </xsl:template> Обработка повторяющихся потомков <xsl:template match=“example”> <xsl:for-each select=“child”> <!-- --> </xsl:for-each> </xsl:template> Получение значений узлов и атрибутов <xsl:value-of select=“.”/> <xsl:value-of select=“child”/> <xsl:value-of select=“@attr”/> Вывод текстовых фрагментов <xsl:text> Произвольное текстовое содержимое </xsl:text> Выражения XPath example * @attr @* example[3] example[last()] */example /exapmle/child[3]/item[2] //example .//example .. Выражения XPath ../@attr example[child] *[child] example[child=“value”] example[@attr=“value”] example[5][@attr=“value”] example[@attr1 and @attr2] XSLT-правила по умолчанию <xsl:template match=“/ | *”> <xsl:apply-templates/> </xsl:template> <xsl:template match=“text()”> <xsl:value-of select=“.”/> </xsl:template> <xsl:template match=“@*”> <xsl:value-of select=“.”/> </xsl:template> Изменение структуры выходного документа <xsl:template match=“example”> <example attr1=“<xsl:value-of select=‘child1’>” attr2=“<xsl:value-of select=‘child2’>” attr3=“<xsl:value-of select=‘attr’>” /> </xsl:template> <xsl:template match=“example”> <example attr1=“{child1}” attr2=“{child2}” attr3=“{@attr}” /> </xsl:template> НЕВЕРНО! Изменение структуры выходного документа <xsl:template match=“example”> <xsl:element name=“{@name}”> <!-- --> </xsl:element> </xsl:template> <xsl:template match=“example”> <example> <xsl:attribute name=“{child}”> <!-- --> </xsl:attribute> </example> </xsl:template> Сортировка вывода <xsl:apply-templates select=“…”> <xsl:sort select=“name”/> </xsl:apply-templates> Атрибуты: data-type=“number” order=“descending” Условные конструкции <xsl:if test=“…”> <!-- --> </xsl:if> <xsl:choose> <xsl:when test=“…”> <!-- --> </xsl:when> <xsl:otherwise> <!-- --> </xsl:overwise> </xsl:xhoose>