XSLT 2.0 分组、求和、计数和条件
XSLT 2.0 Grouping, Summing, Counting and Conditions
我有 XSLT,它正在对输入进行分组,对当前组求和,并且仅在总和满足特定条件时才输出记录。 for-each-group 工作正常,但我无法获得尾部记录的准确记录数。
这是一个示例输入:
<Book_Data>
<Book_Entry>
<Book>
<Book_ID>1</Book_ID>
<Book_Name>Test1</Book_Name>
</Book>
<Sales>
<Quantity>2</Quantity>
</Sales>
<Book_Entry>
<Book_Entry>
<Book>
<Book_ID>1</Book_ID>
<Book_Name>Test1</Book_Name>
</Book>
<Sales>
<Quantity>3</Quantity>
</Sales>
<Book_Entry>
<Book_Entry>
<Book>
<Book_ID>2</Book_ID>
<Book_Name>Test2</Book_Name>
</Book>
<Sales>
<Quantity>3</Quantity>
</Sales>
<Book_Entry>
<Book_Entry>
<Book>
<Book_ID>2</Book_ID>
<Book_Name>Test2</Book_Name>
</Book>
<Sales>
<Quantity>-3</Quantity>
</Sales>
<Book_Entry>
</Book_Data>
这是一个示例 XSLT (2.0):
<xsl:for-each-group select="Book_Data/Book_Entry" group-by="Book/Book_ID">
<xsl:if test="sum(current-group()/Sales/Quantity) != 0">
<xsl:value-of select="Book/Book_ID"/>
<xsl:value-of select="Book/Book_Name"/>
</xsl:if>
</xsl:for-each-group>
<xsl:value-of select="count(distinct-values(Book_Data/Book_Entry/Book/Book_ID[sum(../../Sales/Quantity) != 0]))"/>
问题是顶部部分仅正确输出第 1 本书。但预告片计算了两本书,我不知道如何调整总和以在外部上下文中引用 Book_ID。
您可以将 for-each-group
的结果输出存储在一个变量中,然后对组进行计数,如果我理解您想要什么的话:
<xsl:variable name="groups" as="xs:string*">
<xsl:for-each-group select="Book_Data/Book_Entry" group-by="Book/Book_ID">
<xsl:if test="sum(current-group()/Sales/Quantity) != 0">
<xsl:sequence select="current-grouping-key()"/>
</xsl:if>
</xsl:for-each-group>
</xsl:variable>
<xsl:value-of select="$groups"/>
<xsl:value-of select="count($groups)"/>
我有 XSLT,它正在对输入进行分组,对当前组求和,并且仅在总和满足特定条件时才输出记录。 for-each-group 工作正常,但我无法获得尾部记录的准确记录数。
这是一个示例输入:
<Book_Data>
<Book_Entry>
<Book>
<Book_ID>1</Book_ID>
<Book_Name>Test1</Book_Name>
</Book>
<Sales>
<Quantity>2</Quantity>
</Sales>
<Book_Entry>
<Book_Entry>
<Book>
<Book_ID>1</Book_ID>
<Book_Name>Test1</Book_Name>
</Book>
<Sales>
<Quantity>3</Quantity>
</Sales>
<Book_Entry>
<Book_Entry>
<Book>
<Book_ID>2</Book_ID>
<Book_Name>Test2</Book_Name>
</Book>
<Sales>
<Quantity>3</Quantity>
</Sales>
<Book_Entry>
<Book_Entry>
<Book>
<Book_ID>2</Book_ID>
<Book_Name>Test2</Book_Name>
</Book>
<Sales>
<Quantity>-3</Quantity>
</Sales>
<Book_Entry>
</Book_Data>
这是一个示例 XSLT (2.0):
<xsl:for-each-group select="Book_Data/Book_Entry" group-by="Book/Book_ID">
<xsl:if test="sum(current-group()/Sales/Quantity) != 0">
<xsl:value-of select="Book/Book_ID"/>
<xsl:value-of select="Book/Book_Name"/>
</xsl:if>
</xsl:for-each-group>
<xsl:value-of select="count(distinct-values(Book_Data/Book_Entry/Book/Book_ID[sum(../../Sales/Quantity) != 0]))"/>
问题是顶部部分仅正确输出第 1 本书。但预告片计算了两本书,我不知道如何调整总和以在外部上下文中引用 Book_ID。
您可以将 for-each-group
的结果输出存储在一个变量中,然后对组进行计数,如果我理解您想要什么的话:
<xsl:variable name="groups" as="xs:string*">
<xsl:for-each-group select="Book_Data/Book_Entry" group-by="Book/Book_ID">
<xsl:if test="sum(current-group()/Sales/Quantity) != 0">
<xsl:sequence select="current-grouping-key()"/>
</xsl:if>
</xsl:for-each-group>
</xsl:variable>
<xsl:value-of select="$groups"/>
<xsl:value-of select="count($groups)"/>