gpt4 book ai didi

xml - 复制 XSLT 变量

转载 作者:数据小太阳 更新时间:2023-10-29 01:47:35 25 4
gpt4 key购买 nike

我正在处理 Umbraco XSL 样式表,但我遇到了困难。

基本上,我有一个我测试的参数,如果它存在则使用它的值,否则我使用默认参数 $currentPage

这里是参数

<xsl:param name="source" select="/macro/sourceId" />
<xsl:param name="currentPage" />

这是变量

<xsl:variable name="current">
<xsl:choose>
<xsl:when test="$source &gt; 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="" 属性的情况下复制变量。

UPDATE: I've tried using another approach (see below) but I get a variable out of scope exception.

<xsl:choose>
<xsl:when test="$source &gt; 0">
<xsl:variable name="current" select="umbraco.library:GetXmlNodeById($source)" />
</xsl:when>
<xsl:otherwise>
<xsl:variable name="current" select="$currentPage" />
</xsl:otherwise>
</xsl:choose>

最佳答案

通常,此表达式根据给定条件是否为 true() 选择两个节点集之一。或 false() :

$ns1[$cond] | $ns2[not($cond)]

在您的情况下,这转化为:

    umbraco.library:GetXmlNodeById($source) 
|
$currentPage[not(umbraco.library:GetXmlNodeById($source))]

完整<xsl:variable>定义是:

<xsl:variable name="vCurrent" select=
" umbraco.library:GetXmlNodeById($source)
|
$currentPage[not(umbraco.library:GetXmlNodeById($source))]
"/>

这可以写成更紧凑的方式:

<xsl:variable name="vRealSource" select="umbraco.library:GetXmlNodeById($source)"/>

<xsl:variable name="vCurrent" select=
"$vRealSource| $currentPage[not($vRealSource)]"/>

关于xml - 复制 XSLT 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3834812/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com