"Munt,Peter (BOC eServices)" wrote:
What I need is a <invoice> tag that surrounds the Header
and Lines.
If you use XSLT 2.0, you can use xsl:for-each-group:
~> cat drafts/grouping-2.xsl
<xsl:transform
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="2.0">
<xsl:output indent="yes"/>
<xsl:template match="invoices">
<xsl:copy>
<xsl:for-each-group
select="*"
group-starting-with="invoiceHeader">
<invoice>
<xsl:copy-of select="current-group()"/>
</invoice>
</xsl:for-each-group>
</xsl:copy>
</xsl:template>
</xsl:transform>
~> cat drafts/grouping-2.xml
<invoices>
<invoiceHeader>A</invoiceHeader>
<invoiceLine>A 1</invoiceLine>
<invoiceLine>A 2</invoiceLine>
<invoiceLine>A 3</invoiceLine>
<invoiceHeader>B</invoiceHeader>
<invoiceLine>B 1</invoiceLine>
<invoiceLine>B 2</invoiceLine>
</invoices>
~> saxon drafts/grouping-2.xml drafts/grouping-2.xsl
<?xml version="1.0" encoding="UTF-8"?>
<invoices>
<invoice>
<invoiceHeader>A</invoiceHeader>
<invoiceLine>A 1</invoiceLine>
<invoiceLine>A 2</invoiceLine>
<invoiceLine>A 3</invoiceLine>
</invoice>
<invoice>
<invoiceHeader>B</invoiceHeader>
<invoiceLine>B 1</invoiceLine>
<invoiceLine>B 2</invoiceLine>
</invoice>
</invoices>
If you are restricted to XSLT 1.0, you can recurse on
adjacent lines:
~> cat drafts/grouping-1.xsl
<xsl:transform
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output indent="yes"/>
<xsl:template match="invoices">
<xsl:copy>
<xsl:apply-templates select="invoiceHeader"/>
</xsl:copy>
</xsl:template>
<xsl:template match="invoiceHeader">
<invoice>
<xsl:copy-of select="."/>
<xsl:apply-templates select="
following-sibling::*[1][self::invoiceLine]"/>
</invoice>
</xsl:template>
<xsl:template match="invoiceLine">
<xsl:copy-of select="."/>
<xsl:apply-templates select="
following-sibling::*[1][self::invoiceLine]"/>
</xsl:template>
</xsl:transform>
~> xsltproc drafts/grouping-1.xsl drafts/grouping-2.xml
<?xml version="1.0"?>
<invoices>
<invoice>
<invoiceHeader>A</invoiceHeader>
<invoiceLine>A 1</invoiceLine>
<invoiceLine>A 2</invoiceLine>
<invoiceLine>A 3</invoiceLine>
</invoice>
<invoice>
<invoiceHeader>B</invoiceHeader>
<invoiceLine>B 1</invoiceLine>
<invoiceLine>B 2</invoiceLine>
</invoice>
</invoices>
Regards,
--drkm
___________________________________________________________________________
Faites de Yahoo! votre page d'accueil sur le web pour retrouver directement vos
services préférés : vérifiez vos nouveaux mails, lancez vos recherches et
suivez l'actualité en temps réel.
Rendez-vous sur http://fr.yahoo.com/set
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--