XSLT 分组总和
XSLT grouping sum
目前,我正在使用具有以下结构的 XML 文件:
<TA_CREDITO>
<item>
<VTWEG/>
<LIMITE_CREDITO>2.00</LIMITE_CREDITO>
<MONTO_CONSUMIDO>400.00</MONTO_CONSUMIDO>
<MONTO_COMPROMETIDO>600.00</MONTO_COMPROMETIDO>
<DISPONIBLE>3000.00</DISPONIBLE>
<TIPO_CREDITO>E</TIPO_CREDITO>
</item>
<item>
<VTWEG>11</VTWEG>
<LIMITE_CREDITO>964251.00</LIMITE_CREDITO>
<MONTO_CONSUMIDO>184176.44</MONTO_CONSUMIDO>
<MONTO_COMPROMETIDO>0.00</MONTO_COMPROMETIDO>
<DISPONIBLE>780074.56</DISPONIBLE>
<TIPO_CREDITO>C</TIPO_CREDITO>
</item>
<item>
<VTWEG>12</VTWEG>
<LIMITE_CREDITO>300000.00</LIMITE_CREDITO>
<MONTO_CONSUMIDO>0.00</MONTO_CONSUMIDO>
<MONTO_COMPROMETIDO>0.00</MONTO_COMPROMETIDO>
<DISPONIBLE>300000.00</DISPONIBLE>
<TIPO_CREDITO>C</TIPO_CREDITO>
</item>
</TA_CREDITO>
如您所见,有几个“item”,每个“item”都有一个“tipo_credito”,可以有2个不同的值。我需要的是生成一个新文件,具有类似的结构,但是添加了常见的“tipo_credito”方法的属性。我 return 例如:
<item>
<VTWEG/>
<LIMITE_CREDITO>2.00</LIMITE_CREDITO>
<MONTO_CONSUMIDO>400.00</MONTO_CONSUMIDO>
<MONTO_COMPROMETIDO>600.00</MONTO_COMPROMETIDO>
<DISPONIBLE>3000.00</DISPONIBLE>
<TIPO_CREDITO>E</TIPO_CREDITO>
</item>
<item>
<VTWEG>11</VTWEG>
<LIMITE_CREDITO>1.264.251</LIMITE_CREDITO>
<MONTO_CONSUMIDO>184176.44</MONTO_CONSUMIDO>
<MONTO_COMPROMETIDO>0.00</MONTO_COMPROMETIDO>
<DISPONIBLE>1.080.074.56</DISPONIBLE>
<TIPO_CREDITO>C</TIPO_CREDITO>
</item>
我有这些,但是 if 不工作
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!-- Tomar Informaciòn XML Retornado -->
<xsl:template match="/">
<EX_BLOQUEO>
<xsl:value-of select="//EX_BLOQUEO"/>
</EX_BLOQUEO>
<EX_MOROSIDAD>
<xsl:value-of select="//EX_MOROSIDAD"/>
</EX_MOROSIDAD>
<xsl:for-each select="//item">
<items>
<xsl:if test="TIPO_CREDITO = C">
<LIMITE_CREDITO>
<xsl:value-of select="sum(//LIMITE_CREDITO)"/>
</LIMITE_CREDITO>
</xsl:if>
<xsl:if test="TIPO_CREDITO = ">
<LIMITE_CREDITO>
<xsl:value-of select="sum(//LIMITE_CREDITO)"/>
</LIMITE_CREDITO>
</xsl:if>
</items>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
请尝试以下 XSLT。
它正在使用分组来汇总组中的所有相关元素。
XSLT
<?xml version="1.0"?>
<xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" expand-text="yes">
<xsl:output indent="yes" method="xml"/>
<xsl:template match="/TA_CREDITO">
<xsl:copy>
<xsl:for-each-group select="item" group-by="TIPO_CREDITO">
<item>
<VTWEG>{sum(current-group()/VTWEG/number())}</VTWEG>
<LIMITE_CREDITO>{format-number(sum(current-group()/LIMITE_CREDITO), '#,##0.00')}</LIMITE_CREDITO>
<MONTO_CONSUMIDO>{format-number(sum(current-group()/MONTO_CONSUMIDO), '#,##0.00')}</MONTO_CONSUMIDO>
<MONTO_COMPROMETIDO>{format-number(sum(current-group()/MONTO_COMPROMETIDO), '#,##0.00')}</MONTO_COMPROMETIDO>
<DISPONIBLE>{format-number(sum(current-group()/DISPONIBLE), '#,##0.00')}</DISPONIBLE>
<TIPO_CREDITO>{current-grouping-key()}</TIPO_CREDITO>
</item>
</xsl:for-each-group>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
目前,我正在使用具有以下结构的 XML 文件:
<TA_CREDITO>
<item>
<VTWEG/>
<LIMITE_CREDITO>2.00</LIMITE_CREDITO>
<MONTO_CONSUMIDO>400.00</MONTO_CONSUMIDO>
<MONTO_COMPROMETIDO>600.00</MONTO_COMPROMETIDO>
<DISPONIBLE>3000.00</DISPONIBLE>
<TIPO_CREDITO>E</TIPO_CREDITO>
</item>
<item>
<VTWEG>11</VTWEG>
<LIMITE_CREDITO>964251.00</LIMITE_CREDITO>
<MONTO_CONSUMIDO>184176.44</MONTO_CONSUMIDO>
<MONTO_COMPROMETIDO>0.00</MONTO_COMPROMETIDO>
<DISPONIBLE>780074.56</DISPONIBLE>
<TIPO_CREDITO>C</TIPO_CREDITO>
</item>
<item>
<VTWEG>12</VTWEG>
<LIMITE_CREDITO>300000.00</LIMITE_CREDITO>
<MONTO_CONSUMIDO>0.00</MONTO_CONSUMIDO>
<MONTO_COMPROMETIDO>0.00</MONTO_COMPROMETIDO>
<DISPONIBLE>300000.00</DISPONIBLE>
<TIPO_CREDITO>C</TIPO_CREDITO>
</item>
</TA_CREDITO>
如您所见,有几个“item”,每个“item”都有一个“tipo_credito”,可以有2个不同的值。我需要的是生成一个新文件,具有类似的结构,但是添加了常见的“tipo_credito”方法的属性。我 return 例如:
<item>
<VTWEG/>
<LIMITE_CREDITO>2.00</LIMITE_CREDITO>
<MONTO_CONSUMIDO>400.00</MONTO_CONSUMIDO>
<MONTO_COMPROMETIDO>600.00</MONTO_COMPROMETIDO>
<DISPONIBLE>3000.00</DISPONIBLE>
<TIPO_CREDITO>E</TIPO_CREDITO>
</item>
<item>
<VTWEG>11</VTWEG>
<LIMITE_CREDITO>1.264.251</LIMITE_CREDITO>
<MONTO_CONSUMIDO>184176.44</MONTO_CONSUMIDO>
<MONTO_COMPROMETIDO>0.00</MONTO_COMPROMETIDO>
<DISPONIBLE>1.080.074.56</DISPONIBLE>
<TIPO_CREDITO>C</TIPO_CREDITO>
</item>
我有这些,但是 if 不工作
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!-- Tomar Informaciòn XML Retornado -->
<xsl:template match="/">
<EX_BLOQUEO>
<xsl:value-of select="//EX_BLOQUEO"/>
</EX_BLOQUEO>
<EX_MOROSIDAD>
<xsl:value-of select="//EX_MOROSIDAD"/>
</EX_MOROSIDAD>
<xsl:for-each select="//item">
<items>
<xsl:if test="TIPO_CREDITO = C">
<LIMITE_CREDITO>
<xsl:value-of select="sum(//LIMITE_CREDITO)"/>
</LIMITE_CREDITO>
</xsl:if>
<xsl:if test="TIPO_CREDITO = ">
<LIMITE_CREDITO>
<xsl:value-of select="sum(//LIMITE_CREDITO)"/>
</LIMITE_CREDITO>
</xsl:if>
</items>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
请尝试以下 XSLT。
它正在使用分组来汇总组中的所有相关元素。
XSLT
<?xml version="1.0"?>
<xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" expand-text="yes">
<xsl:output indent="yes" method="xml"/>
<xsl:template match="/TA_CREDITO">
<xsl:copy>
<xsl:for-each-group select="item" group-by="TIPO_CREDITO">
<item>
<VTWEG>{sum(current-group()/VTWEG/number())}</VTWEG>
<LIMITE_CREDITO>{format-number(sum(current-group()/LIMITE_CREDITO), '#,##0.00')}</LIMITE_CREDITO>
<MONTO_CONSUMIDO>{format-number(sum(current-group()/MONTO_CONSUMIDO), '#,##0.00')}</MONTO_CONSUMIDO>
<MONTO_COMPROMETIDO>{format-number(sum(current-group()/MONTO_COMPROMETIDO), '#,##0.00')}</MONTO_COMPROMETIDO>
<DISPONIBLE>{format-number(sum(current-group()/DISPONIBLE), '#,##0.00')}</DISPONIBLE>
<TIPO_CREDITO>{current-grouping-key()}</TIPO_CREDITO>
</item>
</xsl:for-each-group>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>