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>

シリーズの家番号変数にアクセスできないため、ネストされた for each 内で苦痛を感じています

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>すぐ内側に配置します。<xsl:template>

于 2013-10-02T13:28:23.487 に答える