根据xslt中的条件将字符串分配给变量

时间:2012-07-04 05:01:47

标签: xml xslt xpath xslt-1.0 xslt-2.0

如果特定属性返回特定值,我想为变量赋值。在这里,如果pr:all / [@ pr:name = current()/ @ cx:name] / pr:properties /(@ ls:middlename)是“cengie”,我希望将值“young”分配给可变“person” ”。这可能吗?

<xsl:variable
  name='person' select='pr:all/[@pr:name=current()/@cx:name]/pr:properties/(@ls:middlename)'>
</xsl:variable>

3 个答案:

答案 0 :(得分:18)

您可以将任何xslt代码放在 xsl:variable 中,并将结果分配给变量。在这种情况下,您可以使用 xsl:if 来检查您的情况

<xsl:variable name="person"> 
    <xsl:if test="pr:all[@pr:name=current()/@cx:name]/pr:properties[@ls:middlename='cengie']">
       <xsl:text>young</xsl:text>
    </xsl:if>
</xsl:variable> 

如果您想在此处使用“其他”案例,则可以使用 xsl:choose

答案 1 :(得分:3)

请检查:https://github.com/wildfly/wildfly/blob/master/testsuite/integration/src/test/xslt/enableTrace.xsl

<xsl:template match="//l:subsystem/l:periodic-rotating-file-handler" use-when="$trace">
    <xsl:choose>
        <xsl:when test="$trace='none'">
            ...
        </xsl:when>
        <xsl:otherwise>
            ...
        </xsl:otherwise>
    </xsl:choose>
</xsl:template>

将其应用于您的代码......

答案 2 :(得分:2)

<xsl:variable   name='person' 
    select='pr:all/[@pr:name=current()/@cx:name]/pr:properties/(@ls:middlename)'>

</xsl:variable>

这是语法上非法的XPath - 1.0和2.0 。位置步骤不能以谓词开头。有问题的子字符串是:/[

另一种语法错误(这次是XML格式良好)是上面引用的<xsl:variable>元素没有关闭。

你需要纠正这个。

除此之外,这里还有一个XSLT 2.0解决方案(上面引用了XPath表达式的语法,并修正了<xsl:variable>的语法:

在XSLT 2.0中:

<xsl:variable name="person" as="xs:string?" select=
  "'young'[current()/pr:all[@pr:name=current()/@cx:name]
                                            /pr:properties
                                               [@ls:middlename='cengie']
          ]"/>