2013-05-01 58 views
2

這裏的總數是我的xml:XSL 2.0:計數唯一值

<?xml version='1.0' encoding='UTF-8'?> 
<wd:Report_Data xmlns:wd="urn:com.workday.report/CR-INT034-ADP-Garnishment_Disbursements_File-Outbound2"> 
    <wd:Report_Entry> 
    <wd:field>1111</wd:field> 
    </wd:Report_Entry> 
    <wd:Report_Entry> 
    <wd:field>2222</wd:field> 
    </wd:Report_Entry> 
    <wd:Report_Entry> 
    <wd:field>3333</wd:field> 
    </wd:Report_Entry> 
    <wd:Report_Entry> 
    <wd:field>2222</wd:field> 
    </wd:Report_Entry> 
    <wd:Report_Entry> 
    <wd:field>3333</wd:field> 
    </wd:Report_Entry> 
    <wd:Report_Entry> 
    <wd:field>1111</wd:field> 
    </wd:Report_Entry> 
</wd:Report_Data> 

這裏是我使用XSLT:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:wd="urn:com.workday.report/CR-INT034-ADP-Garnishment_Disbursements_File-Outbound2" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
version="2.0"> 
<xsl:strip-space elements="*"/> 
<xsl:output indent="no" method="text" /> 

<xsl:key name="entry" match="wd:Report_Entry" use="wd:field" /> 

<xsl:template match="wd:Report_Data"> 
    <xsl:value-of select="count(wd:Report_Entry | wd:field[ generate-id() = generate-id(key('entry', wd:field))])"/>  
</xsl:template> 

</xsl:stylesheet> 

我想算唯一值。所以在上面的例子中,答案應該是3,我越來越6.我調整了最初給出的答案,使其在1.0中工作,但我不能使用1.0我必須使用2.0 2.0。有沒有什麼辦法讓這個工作在2.0或者我只是運氣不好?

任何幫助將大大感激!

感謝,

薩拉

+0

對於目前的樣式表,你應該使用'數(WD:Report_Entry [生成-ID()=生成-ID(鍵( '進入' ,wd:field)[1])])'。你的樣式表當前正在計算'wd:Report_Entry'元素的數量(6),'generate-id()'的wd:field'元素等於從這個節點中選擇的節點的'generate-id鍵使用'wd:field'的子元素'wd:field'(它不存在,所以它沒有從密鑰中選擇任何東西),導致計數爲6. – 2013-05-07 23:57:02

回答

1

由於您使用XSLT 2.0 ,你可以使用distinct-values() ...

XSLT 2.0

<xsl:stylesheet xmlns:wd="urn:com.workday.report/CR-INT034-ADP-Garnishment_Disbursements_File-Outbound2" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="2.0"> 
    <xsl:strip-space elements="*"/> 
    <xsl:output indent="no" method="text"/> 

    <xsl:template match="/*"> 
     <xsl:value-of select="count(distinct-values(wd:Report_Entry))"/> 
    </xsl:template> 

</xsl:stylesheet> 

輸出

3 
+0

太棒了!!!這正是我所需要的,也是對你的讚美!這是我的最終代碼: 2013-05-07 20:56:29

2

下使用xsl:keyMuenchien method得到wd:Report_Entry元素的不同列表,然後使用count()

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet 
    version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:wd="urn:com.workday.report/CR-INT034-ADP-Garnishment_Disbursements_File-Outbound2"> 
    <xsl:output method="xml" encoding="UTF-8" indent="yes"/> 

    <xsl:key name="entry" match="wd:Report_Entry" use="wd:field" /> 

    <xsl:template match="/"> 
     <xsl:value-of 
      select="count(/wd:Report_Data/wd:Report_Entry[ 
         generate-id() = generate-id(key('entry', wd:field)[1])])"/>  
    </xsl:template> 

</xsl:stylesheet> 
+0

+1以獲得正確答案。 – 2013-05-02 00:38:59

+0

我不得不稍微修改它以使其正常工作,但它現在正在工作。非常感謝。你太棒了!!!最終代碼:'' 2013-05-02 05:03:18

+0

這不適用於2.0。你可以看一下,看看你是否能找到解決方案在2.0中工作。我已經編輯了我的問題以包含更好的xml和xslt。 – 2013-05-07 16:20:26