I have a XML that I need to map.
The XML goes like:
<Children>
<Child>
<References>
<External>
<Reference name="filename" value="1.dat"/>
<Reference name="invoicenr " value="1111111"/>
<Reference name="invoicer_ name" value="Bill"/>
<Reference name="invoicere f" value="bbbbbb"/>
</External>
</References>
</Child>
<Child>
<References>
<External>
<Reference name="filename" value="2.dat"/>
<Reference name="invoicenr " value="222222"/>
<Reference name="invoicer_ name" value="Bill"/>
<Reference name="invoicere f" value="bbbbbb"/>
</External>
</References>
</Child>
<Child>
<References>
<External>
<Reference name="filename" value="3.dat"/>
<Reference name="invoicenr " value="33333"/>
<Reference name="invoicer_ name" value="Clinton"/>
<Reference name="invoicere f" value="ccccc"/>
</External>
</References>
</Child>
</Children>
I want the structure to map to:
<Senders>
<Sender>
<invoicer_name> Bill</invoicer_name>
<invoiceref>bbb bbb</invoiceref>
<Items TotalItems="2"/>
</Sender>
<Sender>
<invoicer_name> Clinton</invoicer_name>
<invoiceref>ccc cc</invoiceref>
<Items TotalItems="1"/>
</Sender>
</Senders>
I have tried to use the "Muenchian Grouping" method, but am not able to
obtain both
<invoicer_nam e> and <invoiceref> under the <Sender> tag
Here is my xsl :
<xsl:styleshe et version="1.0"
xmlns:xsl="http ://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:output encoding="ISO-8859-1"/>
<xsl:key name="kDistinct Sender"
match="Children/Child/References/External/Reference[@name='invoicer _name']/@
value" use="."/>
<xsl:template match="/">
<Senders>
<!-- go through distinct InvoicerName -->
<xsl:for-each
select="/Children/Child/References/External/Reference[@name='invoicer _name']
/@value[generate-id()=generate-id(key('kDistin ctSender',.))]">
<!-- sort by InvoicerName -->
<xsl:sort select="."/>
<Sender>
<xsl:variable name="InvoicerN ame">
<xsl:value-of select="."/>
</xsl:variable>
<InvoicerName >
<xsl:value-of select="$Invoic erName"/>
</InvoicerName>
<Items TotalItems="{co unt(key('kDisti nctSender',.))} ">
</Items>
</Sender>
</xsl:for-each>
</Senders>
</xsl:template>
</xsl:stylesheet>
The XML goes like:
<Children>
<Child>
<References>
<External>
<Reference name="filename" value="1.dat"/>
<Reference name="invoicenr " value="1111111"/>
<Reference name="invoicer_ name" value="Bill"/>
<Reference name="invoicere f" value="bbbbbb"/>
</External>
</References>
</Child>
<Child>
<References>
<External>
<Reference name="filename" value="2.dat"/>
<Reference name="invoicenr " value="222222"/>
<Reference name="invoicer_ name" value="Bill"/>
<Reference name="invoicere f" value="bbbbbb"/>
</External>
</References>
</Child>
<Child>
<References>
<External>
<Reference name="filename" value="3.dat"/>
<Reference name="invoicenr " value="33333"/>
<Reference name="invoicer_ name" value="Clinton"/>
<Reference name="invoicere f" value="ccccc"/>
</External>
</References>
</Child>
</Children>
I want the structure to map to:
<Senders>
<Sender>
<invoicer_name> Bill</invoicer_name>
<invoiceref>bbb bbb</invoiceref>
<Items TotalItems="2"/>
</Sender>
<Sender>
<invoicer_name> Clinton</invoicer_name>
<invoiceref>ccc cc</invoiceref>
<Items TotalItems="1"/>
</Sender>
</Senders>
I have tried to use the "Muenchian Grouping" method, but am not able to
obtain both
<invoicer_nam e> and <invoiceref> under the <Sender> tag
Here is my xsl :
<xsl:styleshe et version="1.0"
xmlns:xsl="http ://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:output encoding="ISO-8859-1"/>
<xsl:key name="kDistinct Sender"
match="Children/Child/References/External/Reference[@name='invoicer _name']/@
value" use="."/>
<xsl:template match="/">
<Senders>
<!-- go through distinct InvoicerName -->
<xsl:for-each
select="/Children/Child/References/External/Reference[@name='invoicer _name']
/@value[generate-id()=generate-id(key('kDistin ctSender',.))]">
<!-- sort by InvoicerName -->
<xsl:sort select="."/>
<Sender>
<xsl:variable name="InvoicerN ame">
<xsl:value-of select="."/>
</xsl:variable>
<InvoicerName >
<xsl:value-of select="$Invoic erName"/>
</InvoicerName>
<Items TotalItems="{co unt(key('kDisti nctSender',.))} ">
</Items>
</Sender>
</xsl:for-each>
</Senders>
</xsl:template>
</xsl:stylesheet>
Comment