2009-08-18 64 views
0

我已經感興趣地閱讀了Web上可用的技術,以便從包含使用XSL的重複項的XML文件中提取項目的唯一列表。XSL:組合分組和呼叫模板

這些範圍分成2類: 1)Muenchian方法(例如:http://www.jenitennison.com/xslt/grouping/) 2)或前一同胞查找 這些都依賴於一個XPath表達式由選擇數據分組。

但是,在我試圖解決的XML文件中,數據不是「本地」存在於XML文件中的。我正在使用xsl:模板來計算來自我的元素的一些聚合數據。我想根據彙總的數據進行分組。

比如我有:

<filmsreview> 
    <record><data name='movie'>Star Wars</data><data name='ratings'>John:Good, Mary:Good</data></record> 
    <record><data name='movie'>Indiana Jones</data><data name='ratings'>John:Good, Mary:Bad, Helen:Average</data></record> 
    <record><data name='movie'>Titanic</data><data name='ratings'>John:Bad, Helen:Good</data></record> 
</filmsreview> 

我知道數據的結構化是不完美的,並通過創建子元素我可以做一些更容易,但我不能輕易更改數據源,讓我們以此爲挑戰。

而且我想建立一個回顧,我有約翰的不同評級: 約翰的評級: 好 壞

我有一個XSL:模板,可以採取記錄元素,並返回約翰的評價此記錄: 例子:

<xsl:template name="get_rating"> 
    <xsl:param name="reviewer" /> 
    <!-- I use some string manipulation, and xsl:value-of to return the review for John--> 
</xsl:template> 

我就可以把它叫做一個XSL在:對,各領約翰的審查詳盡的清單。但我無法將此調用與任何方法結合以獲得唯一值。

我是否必須使用中介XSL將我的XML文件轉換爲更具結構化的方式?或者我可以一步到位?

非常感謝 傑拉德

回答

1

嗯...這應該使用XSLT變量和節點集方法,也許這樣的事情是可能的:

<xsl:variable name="_johnsRatings"> 
    <xsl:apply-templates select="/" mode="johnsRatings" /> 
</xsl:variable> 
<xsl:variable name="johnsRatings" select="msxsl:node-set($_johnsRatings)" /> 

<xsl:template match="/" mode="johnsRatings"> 
    <Ratings> 
     <xsl:for-each select="/filmsReview/record/data[@name='ratings']"> 
       <Rating><xsl:call-template name="get_rating" /></Rating> 
     </xsl:for-each> 
    </Ratings> 
</xsl:template> 

在這一點上,它應該是可以查詢$ johnsRatings變量使用標準XPath查詢,並且您可以使用上面提到的兩種方法之一從它檢索唯一值...

希望可以幫到

編輯: 我不知道你在使用什麼XSLT引擎,我假設你有權訪問msxsl:node-set()函數。但是,大多數XSLT處理器都有類似的方法,因此您可能需要在處理器中搜索相同的方法

+0

謝謝,此答案幫助我找到解決方案。 可能完成答案有幾件事情: 以下屬性必須被添加到了xsl:stylesheet元素 的xmlns:msxsl =「甕:架構 - 微軟COM:XSLT」 以下關鍵需要定義: 可以通過以下循環獲取唯一項: 2009-08-19 14:48:42