使用select -when- else将值绑定到xslt变量
本文关键字:绑定 xslt 变量 select -when- else 使用 | 更新日期: 2023-09-27 18:15:02
我使用xslt用c#将xml转换为xml。下面是显示变量赋值的xslt的摘录:
<xsl:variable name="testvar">
<xsl:choose>
<xsl:when test="$condition">
<xsl:value-of select="myUtils:Method1($var1,$var2)" />
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="myUtils:Method2($var1,$var2)" /> <!--Method1 and Method 2 are written in c# code.-->
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
上面的赋值与下面的赋值不同:
<xsl:variable name="testvar" select="myUtils:Method1($var1,$var2)"/>
另一个变量依赖于上述变量,如下所示:
<xsl:variable name="testvar2" select="$testvar/node()[1]/node()[1]/node()[1]/node()[1]"/>
当以第二种方式分配$testvar
时,该变量被分配期望的值。
Method1
和Method2
的返回类型都是XmlDocument
。我认为<xsl:value-of>
有问题。给这个变量赋值的正确方法是什么?
我已经通过以下代码解决了这个问题:
<xsl:variable name="testvar"><xsl:copy-of select="myUtils:Method1($var1,$var2)"/></variable>
对于第二个变量,我使用了以下代码:
<xsl:variable name="testvar2" select="msxsl:node-set($testvar)/node()[1]/node()[1]/node()[1]/node()[1]"/>
详情请参阅此连结
我猜你的Method1函数返回节点集,而不是简单的文本/数字值。在这种情况下,问题可能是因为xsl:value-of获取节点的"值",而不是实际的节点本身。
尝试使用xsl:copy-of代替
<xsl:copy-of select="myUtils:Method1($var1,$var2)" />