2011-04-28 15 views
0

在我們的工作中,我們有一個自定義框架,可幫助我們爲客戶服務構建快速而強大的頁面。這個框架的組成部分之一是一個特殊的「細節」功能,它允許您選擇列表中的特定項目,單擊它並查看其詳細信息。這是因爲Detail組件接收預定義的XML結構並使用XSLT分析它,這允許它在不同的數據選項卡中顯示數據,顯示圖像或彙總特定數據以及其他功能。在另一個內部動態導入XSLT

我們的要求是,我們希望能夠添加預定義XML結構之外存在的新選項卡,例如,我們可以添加自定義圖表或任何其他特定的數據顯示。

要做到這一點,我們想出一個可行的解決方案將是使特殊片預定義的XML結構中,有兩個新的屬性:

  • 類型:它告訴父母XSLT,這個選項卡應不用標準的XSL轉換解析。 (例如:「文字」)

  • transformationSource:它告訴父XSLT它應包含/導入以轉換此特定選項卡的新XSLT。 (例如:「newTransformation.xslt」)

這可能是動態的嗎?沿着這條路線的東西:

<div> 
    <xsl:for-each select="Tab"> 
    <xsl:choose> 
     <xsl:when test="@type='Literal'"> 
     <xsl:include href=<xsl:value-of select='@transformationSource'/> 
     </xsl:when> 
     <xsl:otherwise> --do what it does everytime 
     <xsl:apply-templates select="Header" /> 
     <xsl:apply-templates select="Data" /> 
     </xsl:otherwise> 
    </xsl:choose> 
    </xsl:for-each> 
</div> 

我們有兩個問題:

  1. 我們不能做一個value-of xsl命令另一個XSL命令裏面

  2. 我們不能使用include或在非根html組件中導入功能,這意味着它不能在div,表格或行或任何​​內容中使用。

任何想法將不勝感激。

預先感謝您:)

+0

我不明白你爲什麼不總是包含樣式表模塊,讓處理器決定哪些規則適用取決於關於該屬性的模式。 – 2011-04-28 20:05:08

回答

1

了xsl:包括和xsl:進口報關總是在編譯時評價:直到你已經組裝所需的所有樣式表模塊,可以不執行XSLT代碼。

要創建一個樣式表S的自定義版本,你應該寫一個「自定義層」作爲模塊M,增加或覆蓋S中的規則,然後你應該讓M導入S.然後你應該運行將M指定爲樣式表的轉換。

如果您在決定如何構建樣式表之前確實需要查看XML,那麼您需要創建一個管道,其中第一步構建樣式表,第二步執行它。你可以使用流水線工具如Xproc(或Orbeon或Cocoon或xmlsh或甚至Ant ...)

+0

非常感謝,你的回答非常有幫助。看來我們將不得不改變一些,所以它會按我們想要的方式工作。關於不同層次的使用的好主意,這是我們要嘗試的第一件事。乾杯! – ABE 2011-04-28 21:07:23

相關問題