4

如果特定属性返回特定值,我想为变量赋值。在这里,如果 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>
4

3 回答 3

24

您可以将任何 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> 

如果你想要一个“else”的情况,你可以使用xsl:choose代替。

于 2012-07-04T06:22:04.967 回答
4

您可以使用use-when,它有条件地应用模板。

但是,它是在模板的“编译时”进行评估的。

检查这个: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>

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

于 2012-07-04T05:07:13.030 回答
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-well-formedness 错误)是<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']
          ]"/>
于 2012-07-05T03:53:02.027 回答