2013-10-02 23 views
0

我非常理解這個主題,但實際上我需要定義一個參數並將其值更改,所以我選擇將它放在for-each循環的頂部,使其成爲本地,但是當我深入到一個嵌套標記中時,例如每個循環的anoter,我就不能再從更高層的地方訪問局部變量。我的問題是他們沒有被新的嵌套循環繼承?即使他們應該在範圍之內,他們是否能看到變量?XSLT中的參數及其上下文

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

系列門牌號碼變量不能訪問,這是造成我的嵌套痛每個

回答

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>裏面,沒有嵌套在其他元素中。

+0

如何更新創建後存儲在參數中的字符串?我試過使用xsl:value,但只是比較它併爲我輸出一個布爾值到輸出文件。然後我會嘗試一個變量,看看是否可以從嵌套循環訪問,歡呼 – user2835543

+0

你不能修改已經聲明的變量。但是,如果變量在循環內部,它將在每次迭代中重新聲明。與其他語言中標記爲「readonly」或「final」的變量類似。 –

+0

是的,我知道,它真的讓我很不舒服,我不能在聲明後修改一個變量,但我已經找出了一個方法,它歡呼:) – user2835543