xsl:variable syntax
<xsl:variable name=”имя” select=”xpath-expression”>some variable value</xsl:variable>
<xsl:variable name=”имя” select=”xpath-expression”>some variable value</xsl:variable>
Если мы хотим корректно вывести через xslt пустую textarea делаем так:
<textarea><xsl:text><![CDATA[]]></xsl:text></textarea>
Думаю многие, кто серьезздно работал с XSLT сталкивался с ситуацией, когда пустой div или textarea херили к ебеням все верстку. Обыдно да. Костыли в виде xsl:text или cdata хуйня на постном масле.
Возникает вопрос, а что же делать джедаям?
А джедаи юзают doctype.
Решение проблемы - правильый dcotype.
Делюсь своим
<xsl:output method=”xml” doctype-system=”http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd”
doctype-public=”-//W3C//DTD XHTML 1.0 Strict//EN”/>
Юзайте и радуйтесь - теперь нихуя не ломается.
1 2 3 4 5 6 | <xsl:choose> <xsl:when test="..."> ... </xsl:when> <xsl:otherwise>...</xsl:otherwise> </xsl:choose> |
Начнем с того что создадим переменную в шаблоне и ее вывод
1 2 3 4 5 6 7 8 9 10 | <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:param name="error_msg" select="0" /> <html> <head> <title>Books </head> <body> <h1>Books</h1> <xsl:value-of select="$error_msg" /> |
Внимание! У вас может появится желание убрать нолик из
1 | select="0" |
, не делайте этого, удалите select=”0″ целиком.
<xsl:param name="error_msg" />
Теперь присвоем значение переменной в момент трансформации на стороне php
$proc = new XSLTProcessor();
$doc = new DOMDocument();
$xsl = new XSLTProcessor();
$doc->load('test4.xsl');
$xsl->importStyleSheet($doc);
$doc->load('test.xml');
$xsl->setParameter(NULL, 'error_msg', 'search item not found');
echo $xsl->transformToXML($doc);
Источник: http://mymans.org/2008/02/21/393
<xsl:template name="topic_title"> <xsl:param name="param1"/> <xsl:param name="param2"/> <xsl:value-of select="$param1"/> </xsl:template>
<xsl:for-each select="catalog/cd"> <xsl:value-of select="..."/> </xsl:for-each>
<xsl:call-template name="foo"> <xsl:with-param name="x" select="1"/> <xsl:with-param name="y" select="2"/> </xsl:call-template>