Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations Mike Lewis on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

Sum of Quantity method - Help please!!

Status
Not open for further replies.

ala9ngs

Technical User
Dec 11, 2007
2
0
0
GB
Hello all,

I am trying to sort a xml document using xsl. I would like to do a sum of the cancelled quantity. Please see below the original file and beneath that the desired output. Does anyone have any suggestions, help, suggested techniques or methods that could help. It would be much appreciated.

Many Thanks

Alan

Original File:

<PostCancelOrder>
<Orders>
<OrderHeader>
<Order>88044710155979T2207</Order>
<AlternateReference>BO351114</AlternateReference>
<CustomerPONumber>2239</CustomerPONumber>
<DispatchComments/>
</OrderHeader>
<OrderDetails>
<MerchandiseLine>
<SalesOrderLine>0001</SalesOrderLine>
<SYSPROCode>14940001</SYSPROCode>
<UPCFullCode>880420428310006</UPCFullCode>
<CancelledQty>60.000</CancelledQty>
</MerchandiseLine>
<MerchandiseLine>
<SalesOrderLine>0001</SalesOrderLine>
<SYSPROCode>14940001</SYSPROCode>
<UPCFullCode>880420428310006</UPCFullCode>
<CancelledQty>36.000</CancelledQty>
</MerchandiseLine>
<MerchandiseLine>
<SalesOrderLine>0001</SalesOrderLine>
<SYSPROCode>14940001</SYSPROCode>
<UPCFullCode>880420428310006</UPCFullCode>
<CancelledQty>204.000</CancelledQty>
</MerchandiseLine>
</OrderDetails>
</Orders>
</PostCancelOrder>

Desired Output:

<PostCancelOrder>
<CancelledOrder>
<CustomerPoNumber>88044710155979T2207</CustomerPoNumber>
<Order/>
<AlternateReference>BO351114</AlternateReference>
<DispatchComments/>
<MerchandiseLine>
<SalesOrderLine>0001</SalesOrderLine>
<SYSPROCode>14940001</SYSPROCode>
<UPCFullCode>880420428310006</UPCFullCode>
<CancelledQty>300.000</CancelledQty>
</MerchandiseLine>
</CancelledOrder>
</PostCancelOrder>
 
Hi k5tm,

Apologies, I dont think a sort would be needed, my error. Please find xslt below. I think this script seems to work but can you see any problems with it, or advise of another method, maybe a neater way?

Thanks again

Alan

<xsl:eek:utput method="xml" omit-xml-declaration="yes" />
<xsl:template match="PostCancelOrder">
<PostCancelOrder>
<xsl:for-each select="//Orders">
<xsl:variable name="Order" select="OrderHeader/Order" />
<Orders>
<OrderHeader>
<xsl:for-each select="OrderHeader">
<Order>
<xsl:value-of select="Order" />
</Order>
<AlternateReference>
<xsl:value-of select="AlternateReference" />
</AlternateReference>
<CustomerPONumber>
<xsl:value-of select="CustomerPONumber" />
</CustomerPONumber>
<DispatchComments>
<xsl:value-of select="DispatchComments" />
</DispatchComments>
</xsl:for-each>
</OrderHeader>
<OrderDetails>
<xsl:for-each select="OrderDetails">
<xsl:for-each select="MerchandiseLine">
<xsl:variable name="LineNumber" select="SalesOrderLine" />
<xsl:if test="not(preceding-sibling::MerchandiseLine/SalesOrderLine[last()]=$LineNumber)">
<MerchandiseLine>
<SalesOrderLine>
<xsl:value-of select="SalesOrderLine" />
</SalesOrderLine>
<SYSPROCode>
<xsl:value-of select="SYSPROCode" />
</SYSPROCode>
<UPCFullCode>
<xsl:value-of select="UPCFullCode" />
</UPCFullCode>
<CancelledQty>
<xsl:value-of select="sum(//Orders[OrderHeader/Order=$Order]/OrderDetails/MerchandiseLine[SalesOrderLine=$LineNumber]/CancelledQty)" />
</CancelledQty>
</MerchandiseLine>
</xsl:if>
</xsl:for-each>
</xsl:for-each>
</OrderDetails>
</Orders>
</xsl:for-each>
</PostCancelOrder>
</xsl:template>
</xsl:stylesheet>
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top