пятница, 3 августа 2012 г.

Проверка на существование переменной в XSLT



Задался я вопросом возможно ли в 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

Комментариев нет:

Отправить комментарий