代码之家  ›  专栏  ›  技术社区  ›  TheUltimateHack

每个循环集变量的XSL

  •  1
  • TheUltimateHack  · 技术社区  · 8 年前

    我知道XSL中的变量更像其他语言中的常量,它们不能在操作中设置。然而,我需要遍历一个节点,计算一个子元素值,如果为true,则将该值设置为参数或变量。完成后,我需要将这些参数传递到模板中。我知道这是不对的,但类似这样:

    <?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>
    

    1 回复  |  直到 8 年前
        1
  •  1
  •   Michael Kay    8 年前

    认为 您试图做的是将变量vADDRESS\u LINE1绑定到类型为“local\u script”的最后一个addressLine的addressValue值。

    正确的方法是

    <xsl:variable name="vADDRESS_LINE1" 
      select="/person/address/address_line[type='local_script'][last()]/addressValue"/>
    

    如果只有一个address\u行满足谓词,那么可以省略 [last()] .

    推荐文章