如果特定属性返回特定值,我想为变量赋值。在这里,如果 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>
您可以将任何 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:choice 代替。
您可以使用 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>
将其应用于您的代码...
<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']
]"/>