使用choose-when-otherwise将值绑定到xslt变量

时间:2013-05-24 06:30:30

标签: c# xslt

我使用xslt用x#将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]"/>

有关详细信息,请参阅此link

1 个答案:

答案 0 :(得分:1)

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

尝试使用 xsl:copy-of 而不是

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