2014-10-07 24 views
0

我正在學習使用mode屬性,並且必須做錯某些事情。道歉,如果這已經回答過,但我沒有在這裏找到它。XSLT:結果文檔中忽略模式的模板

我想根據上下文分別處理「標題」元素。對於主文件,我想添加一個「a」元素在它的內部:

<xsl:template match="title"> 
    <div> 
     <xsl:value-of select="."/> 
     <a href="some_URL">some text 
     </a> 
    </div> 
    </xsl:template> 

但在其他地方我創建結果的文檔,我只想標題:

<xsl:tamplate match="title" mode="print"> 
    <div class="title"> 
     <xsl:value-of select="."/> 
    </div> 
    </xsl:template> 

在我主模板匹配= 「/」 我在做的for-each每個部分,創造了每一個結果文檔:

<xsl:for-each select="/topic/body/bodydiv/section"> 
    <xsl:result-document href="{$printoutfile}"> 
    <html><head>some stuff</head><body> 
    <div class="section"> 
     <xsl:apply-templates mode="print"/> 
    </div> 
    ... more stuff... 
    </body</html> 
    </xsl:result-document> 
    </xsl:for-each> 

然後我呼籲一切對主文檔:

<html><head>stuff</head> 
    <body> 
    <div> 
     <xsl:apply-templates/> 
    </div> 
    </body> 
    </html> 

問題是這是結果文檔標題的作品,但沒有使用其他結果文檔模板,因爲它們沒有mode =「print」。因此,結果文檔的其餘部分都以文本形式出現。

任何想法我需要在這裏做什麼?我顯然缺少一些基本的東西。

謝謝 斯科特

+1

你還沒有顯示任何其他模板,但如果你期望'xsl:apply-templates mode =「print」/>'應用它們,那麼你需要在它們上面有一個'mode =「#all」' 。如果他們使用'apply-templates',那麼你需要使用''。有關詳細信息,請參閱http://www.w3.org/TR/xslt20/#modes。 – 2014-10-07 17:23:55

+0

很好用,謝謝!但我收到一條錯誤消息: IDW0713E:XTRE0540:/ topic/body [1]/bodydiv [2]/section [1]/title [1]的模糊規則匹配 感謝您的幫助。 – 2014-10-08 15:11:21

+1

讓我們在一個問題中解決一個問題。我已將我的評論意見轉化爲答案,以便我們能夠解決這個問題。對於另一個問題,問一個新的問題,除非你的XSLT處理器告訴你哪個兩個或多個模板匹配那個'title'元素,你可以簡單地通過決定哪一個具有更高的優先級, 'priority =「5」'就可以了。 – 2014-10-08 16:32:12

回答

1

您還沒有表現出任何的其他的模板,但如果你希望在<xsl:apply-templates mode="print"/>應用它們,那麼你需要對他們有mode="#all"。如果他們做了額外的應用模板,那麼你需要使用<xsl:apply-templates select="#current"/>。詳情請參閱http://www.w3.org/TR/xslt20/#modes