2012-02-23 93 views
2

我是XSL的新手,無論我們是否可以讀取xml標記中的數據,然後將其存儲在數組或其他東西中,然後刪除重複項通過使用不同的選項。讀取循環中的條目並使用XSL刪除重複的條目

例如。

<local> 
    <ID> 
    <fruit>apple</fruit> 
    <fruit>orange</fruit> 
    </ID> 
    <ID> 
    <fruit>apple</fruit> 
    <fruit>mango</fruit> 
    </ID> 
</local> 

在這裏,我正在閱讀本地作爲循環啓動器,並需要讀取它下面的所有ID並顯示果實。在這種情況下,我不存在4種不同的水果,其中一種是重複的,所以我只想顯示這些和獨特的條目並顯示。有沒有可能使用XSLT完成這項工作?

<xsl:for-each select="Local"> 
    <xsl:variable name="fruits"> 
    <xsl:for-each select="set:distinct(ID/fruit)"> 
     <xsl:copy-of select="."/> 
    </xsl:for-each> 
    </xsl:variable> 
</xsl:for-each> 

回答

0

I.這XSLT 1.0轉化

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:key name="kFruitByName" match="fruit" use="."/> 

<xsl:template match="/"> 
    <xsl:copy-of select= 
    "/*/*/fruit 
    [generate-id() 
    = 
     generate-id(key('kFruitByName', .)[1]) 
    ]"/> 
</xsl:template> 
</xsl:stylesheet> 

當所提供的XML文檔施加:

<local> 
    <ID> 
     <fruit>apple</fruit> 
     <fruit>orange</fruit> 
    </ID> 
    <ID> 
     <fruit>apple</fruit> 
     <fruit>mango</fruit> 
    </ID> 
</local> 

產生想要的,正確的結果

<fruit>apple</fruit> 
<fruit>orange</fruit> 
<fruit>mango</fruit> 

說明:使用Muenchian method for grouping


二, XSLT 2.0解決方案

<xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 

<xsl:template match="/*"> 
    <xsl:for-each-group select="*/fruit" group-by="."> 
    <xsl:sequence select="."/> 
    </xsl:for-each-group> 
</xsl:template> 
</xsl:stylesheet> 

當這種轉變是在同一個XML文檔(以上)應用,再次同樣正確的結果產生

<fruit>apple</fruit> 
<fruit>orange</fruit> 
<fruit>mango</fruit> 
+0

謝謝Dimitre,但我想在用戶界面中僅顯示值,當我嘗試同樣的方式時,它不會讓我得到確切的結果。如預期。它在那裏顯示爲空值,沒有輸出顯示 – user1227273 2012-02-23 02:23:43

+0

嗨Dimitre,我確實得到了這個概念,但現在對我來說這個問題是。 <本地ID = 「1」 類型= 「主要」> - <摘要日期= 「23-02-12」> - 蘋果 - <本地ID = 「2」鍵入= 「主」> - <總結日期= 「23-02-12」> - 蘋果 - 芒果 因此,在這種情況下,我能夠進入當地,但無法讀取數據。你能幫我嗎? – user1227273 2012-02-23 02:39:56

+0

@ user1227273:請編輯問題,或者更好地提出一個新問題 - 評論對格式化代碼不方便。另外,您最後評論中的文本不是格式良好的XML文檔。您還需要提供確切的想要的結果 - 它應該是節點的副本,還是僅僅是它們的文本或HTML。 – 2012-02-23 03:17:23