繁体   English   中英

XSLT 2.0分组,求和,计数和条件

[英]XSLT 2.0 Grouping, Summing, Counting and Conditions

我有将输入分组,对当前组求和的XSLT,并且仅在总和满足特定条件时才输出记录。 每个组的工作正常,但我无法获得预告片记录的准确记录数。

这是一个示例输入:

<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)"/>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM