XSLT中的参数及其上下文

时间:2013-10-02 13:23:01

标签: xml xslt

我非常了解这个主题,但实际上我需要定义一个参数并让它的值发生变化,所以我选择将它放在for-each循环的顶部,使其成为本地,但是当我潜水时进入一个嵌套标签,例如每个循环的anoter,我不能再从更高的那个访问本地变量。我的问题是它们不会被新的嵌套循环继承吗?他们是否可以看到变量,即使它们应该在范围内?

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

无法访问系列门牌号变量,这导致我在每个

的嵌套内部感到痛苦

1 个答案:

答案 0 :(得分: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>置于<xsl:template>内,而不是嵌套在其他元素中。