2017-01-24 120 views
0

我無法提供XSLT來識別某個元素的重複項,併合並/壓縮它以避免重複。XSLT:將具有重複ID的平面列表轉換爲層次結構

我有XML是這樣的:

<items> 
    <item> 
     <ID>1</ID> 
     <RelationalID>55</RelationalID> 
    </item> 
    <item> 
     <ID>1</ID> 
     <RelationalID>56</RelationalID> 
    </item> 
    <item> 
     <ID>1</ID> 
     <RelationalID>57</RelationalID> 
    </item> 
    <item> 
     <ID>2</ID> 
     <RelationalID>55</RelationalID> 
    </item> 
</items> 

希望它看起來像:

<items> 
    <item> 
     <ID>1</ID> 
     <RelationalID>55</RelationalID> 
     <RelationalID>56</RelationalID> 
     <RelationalID>57</RelationalID> 
    </item> 
    <item> 
     <ID>2</ID> 
     <RelationalID>55</RelationalID> 
    </item> 
</items> 
+3

如果您使用的是XSLT 1.0,請在muenchian分組上搜索。如果您使用的是XSLT 2.0,請在xsl:for-each-group上進行搜索。如果您仍然遇到問題,請將您的XSLT添加到您的問題中。另見http://stackoverflow.com/help/mcve –

+0

另外,我沒有看到任何'item'的重複。是否有可能有一個'item'與'ID'和'RelationalID'具有相同的'item'?如果是這樣,XSLT應該如何處理該輸出的外觀? –

+1

請添加您至今創建的XSLT。另外,請具體說明您用於轉換文件的XSLT版本。 – Madeyedexter

回答

1

這是一個標準的分組問題。如果您能夠使用XSLT 2.0,請使用

<xsl:for-each-group select="item" group-by="ID"> 
    <xsl:copy-of select="current-group()[1]/ID, current-group()/RelationalID"/> 
</xsl:for-each-group> 

如果您遇到XSLT 1.0,請閱讀Muenchian分組。

相關問題