0

我对这个主题的理解非常松散,但实际上我需要定义一个参数并改变它的值,所以我选择将它放在 for-each 循环的顶部,使其成为本地的,但是当我潜入嵌套的标记,例如每个循环的另一个,我不能再从更高的一个访问局部变量。我的问题是它们不会被新的嵌套循环继承吗?即使它们应该在范围内,他们也看不到变量吗?

<xsl:for-each select="ns0:BxfMessage/ns0:BxfData/ns0:Content" >
  <xsl:if test="string(@version) = 'Series'">
    <SERIES>
      <xsl:param name="SeriesHouseNumber">
        <xsl:value-of select="string(ns0:BxfMessage/ns0:BxfData/ns0:Content/ns0:ProgramContent/ns0:ContentMetaData/ns0:ContentId/ns0:HouseNumber)"/>
      </xsl:param> 

      <UniqueIDFieldName>
        <xsl:value-of select="string(ns0:ProgramContent/ns0:ContentMetaData/ns0:ContentId/ns0:HouseNumber)"/>
      </UniqueIDFieldName>

      <PROGID1>
        <xsl:value-of select="string(ns0:ProgramContent/ns0:ContentMetaData/ns0:ContentId/ns0:HouseNumber)"/>
      </PROGID1>

      <SER_TITLE>
        <xsl:value-of select="string(ns0:ProgramContent/ns0:ContentMetaData/ns0:Name)"/>
      </SER_TITLE>

      <xsl:for-each select="../ns0:Content" >
        <xsl:if test="string(@version) = 'Title'">
          <CHILDREN>
            <EPISODE>
              <xsl:if test="$SeriesHouseNumber = string(ns0:ProgramContent/ns0:ContentMetaData/ns0:ContentId/ns0:AlternateId)">
                <ORIG_CT_TITLE>
                  <xsl:value-of select="string(ns0:ProgramContent/ns0:ContentMetaData/ns0:Name)"/>
                </ORIG_CT_TITLE>

无法访问系列门牌号变量,这导致我在每个嵌套的内部感到痛苦

4

1 回答 1

0

使用<xsl:variable>而不是<xsl:param>.

<xsl:variable
    name="SeriesHouseNumber"
    select="string(ns0:BxfMessage/ns0:BxfData/ns0:Content/ns0:ProgramContent/ns0:ContentMetaData/ns0:ContentId/ns0:HouseNumber)"/>

如果您仍然希望使用参数(以便以后可以替换它),请将<xsl:param>立即放在 your<xsl:template>中,而不是嵌套在其他元素中。

于 2013-10-02T13:28:23.487 回答