XSLT变量和选择/否则无法正常工作

时间:2009-12-01 23:02:01

标签: xslt

我有一些看起来像的XSLT:

<xsl:choose>
    <xsl:when test="string(//User[@UserID = $UserID]/ROOT/Prop[@Nm = 'GreaseBoardCategory'])">
        <xsl:variable name="Type" select="concat('Documenter', //User[@UserID = $UserID]/ROOT/Prop[@Nm = 'GreaseBoardCategory'])"/>                         
    </xsl:when>
    <xsl:otherwise>
        <xsl:variable name="Type" select="concat('Documenter', user:GetUserType(string(//Payload/@SiteID), string(@UserID)))"/>                         
    </xsl:otherwise>
</xsl:choose>

我想为它分配一个名为“Type”的变量我从其他例子中看到我应该这样做:

<xsl:variable name="Type">
    <xsl:choose>
        <xsl:when test="string(//User[@UserID = $UserID]/ROOT/Prop[@Nm = 'GreaseBoardCategory'])">
            <xsl:value-of select="concat('Documenter', //User[@UserID = $UserID]/ROOT/Prop[@Nm = 'GreaseBoardCategory'])"/>
        </xsl:when>
        <xsl:otherwise>
            <xsl:value-of select="concat('Documenter', user:GetUserType(string(//Payload/@SiteID), string(@UserID)))"/>
        </xsl:otherwise>
    </xsl:choose>
</xsl:variable>

但我的变量没有设定。它应该击中否则阻止,但永远不会。有任何想法吗?它没有被设置为任何东西..

获取Type的唯一方法是取消选择/何时/否则语句,然后选择以下两个选项之一:

<xsl:variable name="Type" select="concat('Documenter', //User[@UserID = $UserID]/ROOT/Prop[@Nm = 'GreaseBoardCategory'])"/>

例如。

2 个答案:

答案 0 :(得分:0)

xsl:choose应该按预期工作。我建议你简化你的例子。说

<xsl:value-of select="A"/>

在when-branch和类似的说“B”在否则分支,而不是你更复杂的连接。

最后,正如其他人所问,向我们展示您评估变量“Type”和XML输入的代码。提到VBScript可能意味着您正在使用XSLT 1.0。我只想确认一下。

答案 1 :(得分:0)

好吧我明白了。问题在于我如何访问XSLT变量Type ..我最初有:

<xsl:value-of select="user:InsertPerson($SiteID, $VisitGUID, $ID, $FirstName, $MiddleName, $LastName, $Address1, $Address2, $City, $State, $Zipcode, $Degree, $SSN, $Phone1, $Phone2, $Priority, $LogonCategory, $HospitalID, $DocumentCreateTime, $CoSigner, $Type, $Primary, $AddTime)" disable-output-escaping="yes"/>

但后来我将"..., $Type, ..."更改为"..., string($Type), ..."并修复了该问题。我不确定为什么在所有参数中,这是唯一需要用“string(...)”包装的参数,但它确实解决了这个问题。

感谢帮助everyonE!