我有一些看起来像的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'])"/>
例如。
答案 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!