使用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时,该变量被分配期望的值。

Method1Method2的返回类型都是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]"/>

详情请参阅此连结

使用select -when- else将值绑定到xslt变量

我猜你的Method1函数返回节点集,而不是简单的文本/数字值。在这种情况下,问题可能是因为xsl:value-of获取节点的"值",而不是实际的节点本身。

尝试使用xsl:copy-of代替

 <xsl:copy-of select="myUtils:Method1($var1,$var2)" />