我使用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
时,会为此变量分配预期值。
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]"/>
有关详细信息,请参阅此link。
答案 0 :(得分:1)
我猜你的 Method1 函数返回节点集,而不是简单的文本/数字值。在这种情况下,问题可能是因为 xsl:value-of 获取节点的“值”,而不是实际节点本身。
尝试使用 xsl:copy-of 而不是
<xsl:copy-of select="myUtils:Method1($var1,$var2)" />