XSL For-each 循环设置变量
XSL For-each loop set variable
我知道 XSL 中的变量更像是其他语言中的常量,它们不能在操作内部设置。但是,我需要遍历一个节点,评估子元素值,如果为真,则将该值设置为参数或变量。完成后,我需要将这些参数传递到模板中。我知道这不正确,但像这样:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="2.0">
<xsl:template match="/">
<xsl:for-each select="/person/address/address_line">
<xsl:if test="type = 'local_script'">
<xsl:variable name="vADDRESS_LINE1" select="addressValue"/>
</xsl:if>
</xsl:for-each>
<xsl:call-template name="FormatAddress">
<xsl:with-param name="ADDRESS_LINE1" select="$vADDRESS_LINE1"></xsl:with-param>
</xsl:call-template>
</xsl:template>
<xsl:template name="FormatAddress">
<xsl:param name="ADDRESS_LINE1"></xsl:param>
<!-- laydown formatted address in xml-->
</xsl:template>
我 认为 您正在尝试做的是将变量 vADDRESS_LINE1 绑定到类型为 [=20= 的最后一个 addressLine 的 addressValue 值].
正确的做法是
<xsl:variable name="vADDRESS_LINE1"
select="/person/address/address_line[type='local_script'][last()]/addressValue"/>
如果只有一个 address_line 满足谓词那么你可以省略 [last()]
.
我知道 XSL 中的变量更像是其他语言中的常量,它们不能在操作内部设置。但是,我需要遍历一个节点,评估子元素值,如果为真,则将该值设置为参数或变量。完成后,我需要将这些参数传递到模板中。我知道这不正确,但像这样:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="2.0">
<xsl:template match="/">
<xsl:for-each select="/person/address/address_line">
<xsl:if test="type = 'local_script'">
<xsl:variable name="vADDRESS_LINE1" select="addressValue"/>
</xsl:if>
</xsl:for-each>
<xsl:call-template name="FormatAddress">
<xsl:with-param name="ADDRESS_LINE1" select="$vADDRESS_LINE1"></xsl:with-param>
</xsl:call-template>
</xsl:template>
<xsl:template name="FormatAddress">
<xsl:param name="ADDRESS_LINE1"></xsl:param>
<!-- laydown formatted address in xml-->
</xsl:template>
我 认为 您正在尝试做的是将变量 vADDRESS_LINE1 绑定到类型为 [=20= 的最后一个 addressLine 的 addressValue 值].
正确的做法是
<xsl:variable name="vADDRESS_LINE1"
select="/person/address/address_line[type='local_script'][last()]/addressValue"/>
如果只有一个 address_line 满足谓词那么你可以省略 [last()]
.