2

这是我的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 中工作,或者我只是不走运?

任何帮助将不胜感激!

谢谢,

莎拉

4

2 回答 2

2

下面使用xsl:keyMuenchien 方法来获取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>
于 2013-05-02T00:03:57.933 回答
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
于 2013-05-07T19:34:24.313 回答