|
Subject: RE: [xsl] Positional Grouping problem From: Florent Georges <darkman_spam@xxxxxxxx> Date: Mon, 29 May 2006 11:05:18 +0200 (CEST) |
"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 prifiris : virifiez vos nouveaux mails, lancez vos recherches et suivez l'actualiti en temps riel.
Rendez-vous sur http://fr.yahoo.com/set
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [xsl] Positional Grouping probl, Mukul Gandhi | Thread | [xsl] XSL Injection, is it possible, G. T. Stresen-Reuter |
| Re: [xsl] Positional Grouping probl, Mukul Gandhi | Date | [xsl] XSL Injection, is it possible, G. T. Stresen-Reuter |
| Month |