这是我的xml:
<?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中运行,或者我只是运气不好?
非常感谢任何帮助!
谢谢,
萨拉
答案 0 :(得分:2)
以下使用xsl:key
和Muenchien 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>
答案 1 :(得分: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