1
<customer>
  <item>
    <BILLNO>1</BILLNO>
    <product>ABC</product>
    <AMT>20</AMT>
  </item>
  <item>
    <BILLNO>2</BILLNO>
    <product>GHK</product>
    <AMT>30</AMT>
  </item>
  <item>
    <BILLNO>1</BILLNO>
    <product>XYZ</product>
    <AMT>20</AMT>
  </item>
</customer>

我正在尝试使用 xslt1.0 获取不同值的总和。我希望使用 muenchian 方法得到这样的输出。每个账单将有多个产品。在一天结束时,我需要账单总数和总金额

<sales>
  <totalbills>2</totalbills>
  <totalamount>50</totalamount>
</sales>

感谢帮助拉姆

4

2 回答 2

0

这个 Xslt 样式表:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
  <xsl:output method="xml" indent="yes"/>

  <xsl:key name="item-key" match="item" use="BILLNO/text()"/>

  <xsl:template match="/customer">
    <root>
      <xsl:for-each select="item[generate-id() = generate-id(key('item-key', BILLNO/text()))]">
        <sales>
          <totalbills>
            <xsl:value-of select="count(../item[BILLNO = current()/BILLNO])"/>
          </totalbills>
          <totalamount>
            <xsl:value-of select="sum(../item[BILLNO = current()/BILLNO]/AMT)"/>
          </totalamount>
        </sales>
      </xsl:for-each>
    </root>
  </xsl:template>
</xsl:stylesheet>

呈现以下输出:

<?xml version="1.0" encoding="utf-8"?>
<root>
  <sales>
    <totalbills>2</totalbills>
    <totalamount>40</totalamount>
  </sales>
  <sales>
    <totalbills>1</totalbills>
    <totalamount>30</totalamount>
  </sales>
</root>
于 2012-04-15T05:49:42.943 回答
0

这个简短而简单的转换(不xsl:for-each,不..,不text()使用):

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:key name="kBills" match="item" use="BILLNO"/>

 <xsl:variable name="vdistItems" select=
  "/*/*[generate-id() = generate-id(key('kBills', BILLNO)[1])]"/>

 <xsl:template match="/*">
     <sales>
      <totalbills><xsl:value-of select="count($vdistItems)"/></totalbills>
      <totalamount><xsl:value-of select="sum($vdistItems/AMT)"/></totalamount>
     </sales>
 </xsl:template>
</xsl:stylesheet>

应用于提供的 XML 文档时:

<customer>
  <item>
    <BILLNO>1</BILLNO>
    <product>ABC</product>
    <AMT>20</AMT>
  </item>
  <item>
    <BILLNO>2</BILLNO>
    <product>GHK</product>
    <AMT>30</AMT>
  </item>
  <item>
    <BILLNO>1</BILLNO>
    <product>XYZ</product>
    <AMT>20</AMT>
  </item>
</customer>

产生确切想要的正确结果:

<sales>
   <totalbills>2</totalbills>
   <totalamount>50</totalamount>
</sales>

解释:适当使用

  1. Muenchian分组方法

  2. sum()功能_

于 2012-04-15T14:00:26.903 回答