This is a grouping problem, and can be solved using
Muenchian grouping -
<?xml version="1.0"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="xml" indent="yes" />
<xsl:key name="by-customer" match="Customer" use="@id"
/>
<xsl:template match="/Customers">
<Customers>
<xsl:for-each select="Customer[generate-id(.) =
generate-id(key('by-customer',@id)[1])]">
<Customer id="{(_at_)id}">
<Name>
<xsl:value-of select="Name" />
</Name>
<Address>
<xsl:value-of select="Address" />
</Address>
<xsl:for-each select="key('by-customer',@id)">
<Sales>
<date>
<xsl:value-of select="Sales/date" />
</date>
<amount>
<xsl:value-of select="Sales/amount" />
</amount>
</Sales>
</xsl:for-each>
</Customer>
</xsl:for-each>
</Customers>
</xsl:template>
</xsl:stylesheet>
Regards,
Mukul
--- sbz sbz <sbz(_at_)masscreations(_dot_)com> wrote:
I have an XML file similiar to below. In this
example I need the Customer to appear only once, in
the real file it may be there once or 20 times. I
need the Sales data do be copied up from any
duplicate customer.
I have thought about doing this using vbscript
maybe, but would prefer XSL to do it. I have looked
at merge but that requires loading 2 xml docs in.
I'd also prefer not have a duplicate xml file ...
the file will be over 600 megs so loading two would
be intensive.
Is this even possible?
Any tips would be appreciated. Thank You.
<Customers>
<Customer id="100">
<Name></Name>
<Address></Address>
<Sales>
<date>August 1, 2004</date>
<amount>18</amount>
</Sales>
</Customer>
<Customer id="100">
<Name></Name>
<Address></Address>
<Sales>
<date>August 10, 2004</date>
<amount>22</amount>
</Sales>
</Customer>
</Customers>
Desired Result:
<Customers>
<Customer id="100">
<Name></Name>
<Address></Address>
<Sales>
<date>August 1, 2004</date>
<amount>18</amount>
</Sales>
<Sales>
<date>August 10, 2004</date>
<amount>22</amount>
</Sales>
</Customer>
</Customers>
__________________________________
Do you Yahoo!?
New and Improved Yahoo! Mail - Send 10MB messages!
http://promotions.yahoo.com/new_mail