Задался я вопросом возможно ли в xslt проверить переменную как isset() в php?
В php объявлена переменная:
$xmlPage = new DOMDocument(); $xmlPageDocument = $xmlPage->createElement("document"); $processor = new XSLTProcessor(); $processor->setParameter('', 'links', 'other text'); echo $processor->transformToXml($xmlPageDocument);
Мне нужно что бы строка:
<xsl:value-of select="$links" />не выдавала ошибки если переменная из PHP не передана.
Поискал в интернете, перепробовал три варианта:
<xsl:if test="boolean($links)"> +1 </xsl:if> <xsl:choose> <xsl:when test="$links > 0"> +2 </xsl:when> <xsl:otherwise> -2 </xsl:otherwise> </xsl:choose> <xsl:variable name="output"> <xsl:if test="$links='true'"> +3 </xsl:if> </xsl:variable> <xsl:copy-of select="$output"/> <xsl:if test="normalize-space($output) != ''"> -3</p> </xsl:if>
Ни чего не помогло.
Как вариант объявить переменную в начале шаблона:
<xsl:template name="foo"> <xsl:variable name="links">
и передать параметр в шаблон:
<xsl:call-template name="foo">
<xsl:with-param name="links" select="la-la" />
но мне это не подходило т.к. я в шаблон явно переменную не передавал, поэтому этим объявлением я просто перезатерал переменную.
Нашел такой выход:
Передавать переменную в PHP как атрибут:
$xmlPage = new DOMDocument(); $xmlPageDocument = $xmlPage->createElement("document"); $xmlPageDocument->setAttribute('links', 'other text');тогда в XSL можно спокойно её проверить через XPath:
<xsl:if test="/document/@links">
<xsl:value-of select="/document/@links" />
</xsl:if>
XSL check for the existence of variable
Комментариев нет:
Отправить комментарий