Я работаю над таблицей стилей Umbraco XSL, и я довольно застрял.
По сути, у меня есть параметр, который я тестирую и использую его значение, если оно присутствует, в противном случае я использую параметр по умолчанию $currentPage
.
Вот параметры
<xsl:param name="source" select="/macro/sourceId" />
<xsl:param name="currentPage" />
Вот переменная
<xsl:variable name="current">
<xsl:choose>
<xsl:when test="$source > 0">
<xsl:copy-of select="umbraco.library:GetXmlNodeById($source)" />
</xsl:when>
<xsl:otherwise>
<xsl:copy-of select="$currentPage" />
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
А вот где я его использую
<xsl:for-each select="msxml:node-set($source)/ancestor-or-self::* [@isDoc and @level=$level]/* [@isDoc and string(umbracoNaviHide) != '1']">
... code here ...
</xsl:for-each>
В двух словах
Это работает
<xsl:variable name="source" select="$currentPage" />
Это не
<xsl:variable name="source">
<xsl:copy-of select="$currentPage" /> <!-- Have tried using <xsl:value-of /> as well -->
</xsl:variable>
Как скопировать переменную без использования атрибута select=""
.
ОБНОВЛЕНИЕ: Я пытался использовать другой подход (см. Ниже), но я получаю переменную вне области действия исключение.
<xsl:choose>
<xsl:when test="$source > 0">
<xsl:variable name="current" select="umbraco.library:GetXmlNodeById($source)" />
</xsl:when>
<xsl:otherwise>
<xsl:variable name="current" select="$currentPage" />
</xsl:otherwise>
</xsl:choose>