(讓我風險總體戰略問題可能冒犯協議和爲難我。)XSLT 1.0初步處理策略
我輸入XML轉換成HTML的元素乘元素轉換之前,我需要確定的順序其中將呈現元素。這樣做需要遞歸分析,包括合併有序列表和跟蹤圖形,全部基於要呈現的元素的屬性。
經過那個處理後,我實際上得到了一個有序的屬性值列表,並且我將呈現按該列表排序的元素。
哪種策略更好?
1)將預分析的結果爲一個全局變量,這將是屬性值的列表,然後通過該列表循環,這樣的事情:
<xsl:variable name=orderOfPresentation>
<xsl:call-template name="analyses">
</xsl:variable>
<xsl:template match="root">
<xsl:for-each select="$orderOfPresentation">
<xsl:apply-templates select="/" />
</xsl:for-each>
</xsl:template>
或
2)應用格式深的分析,一旦確定有序列表模板,沒有收出遞歸,是這樣的:
<xsl:template match="root">
<xsl:call-template name="analysis">
[with, as parameters, various sets of attribute nodes, extracted from the input XML]
</xsl:call-template>
</xsl:template>
<xsl:template name="analysis">
[recursions that include calls to sub-analysis]
</xsl:template>
<xsl:template name="sub-analysis">
[recursions that include calls to sub-sub-analysis]]
</xsl:template>
<xsl:template name="sub-sub-analysis">
[more work, which eventually produces an ordered list, $orderOfPresentation]
<xsl:for-each select="$orderOfPresentation">
<xsl:apply-templates select="/" />
</xsl:for-each>
</xsl:template>
在F第一種策略可能只是暴露程序語言程序員的想法,但似乎有利於在處理真正的變革業務之前讓處理器清理乾淨。
但是,XLST 1.0(我必須在其中工作,沒有擴展名)沒有簡單的方法來表示字符串值列表,並且(如果我正確理解這一點)只能傳遞迴全局變量a Result樹片段(我不明白的東西)。所以戰略(1)看起來很糟糕。但是(2),一種從遞歸內部調用所有真實轉換的策略似乎效率低下,難以維護。
這些策略之一是最佳實踐嗎?還是他們都是頭腦混亂的證據?
環境是如何看待您的XSLT處理器從哪裏調用的?是否有機會將第一個XSLT程序應用於排序,將結果XML存儲在某處並通過第二個執行「XML到HTML」轉換的XSLT程序來處理?這是我想在這裏嘗試的。 – 2012-01-05 17:30:42
轉換正在客戶端完成,在Web瀏覽器中。所以,不,我不能存儲中間XML。 – JPM 2012-01-05 17:33:21
嗯,我對JavaScript沒有太多瞭解,但是不可能通過使用JavaScript來達到目的?這個例子http://www.w3schools.com/xsl/xsl_client.asp看起來像它可以很容易地修改兩次運行XSLT處理器。 – 2012-01-05 17:38:07