Subject: Re: [xsl] Group various elements with empty tags (flat XML structure to hierarcial XML) From: António Mota <amsmota@xxxxxxxxx> Date: Thu, 6 Jan 2005 19:06:58 +0000 |
I think the solution is *a lot* simpler, but i read you post in a diagonal line... Look the faq for identity transform, it should cover what you need. On Thu, 06 Jan 2005 13:55:59 -0500, M Glenties <mglenties@xxxxxxxxxxx> wrote: > I need to convert a flat xml document to something more hierarcial by > surrounding some elements with other empty elements. > > Original XML: > ------------ > <Record> > <id>102</id> > <type>O</Type> > <count>37</count> > <firstname>Joe</firstname> > <lastname>Smith</lastname> > <initial>A</initial> > <street>35 Main Street</street> > <city>Moosejaw</city> > <country>Sasaktchewan</country> > <postal_code>TOEOPO</postal_code> > <amount1>1.23</amount1> > <amount2>4.56</amount2> > <amount3>7.89</amount3> > <language>E</language> > </Record> > > Desired Output: > -------------- > <Record> > <id>102</id> > <type>O</Type> > <count>37</count> > <NAME> > <firstname>Joe</firstname> > <lastname>Smith</lastname> > </NAME> > <ADDRESS> > <street>35 Main Street</street> > <city>Moosejaw</city> > <country>Saskatchewan</country> > <postal_code>TOEOPO</postal_code> > </ADDRESS> > <language>E</language> > </Record> > > My stylesheet: > ------------- > <xsl:stylesheet version="1.0" > xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> > <xsl:template match="node()|@*"> > <xsl:copy> > <xsl:apply-templates select="node()|@*"/> > </xsl:copy> > </xsl:template> > > <xsl:template match="Record"> > <Record> > <xsl:apply-templates select="lastname" mode="Name"/> > <xsl:apply-templates select="postal_code" mode="PC"/> > </Record> > </xsl:template> > > <xsl:template match="lastname" mode="Name"> > <NAME> > <xsl:apply-templates > select="preceding::firstname[generate-id(following::lastname[1]) = > generate-id(current())]"/> > <xsl:apply-templates select="."/> > </NAME> > </xsl:template> > > <xsl:template match="postal_code" mode="PC"> > <ADDRESS> > <xsl:apply-templates > select="preceding::street[generate-id(following::postal_code[1]) = > generate-id(current())]"/> > <xsl:apply-templates select="."/> > </ADDRESS> > </xsl:template> > > <xsl:template match="Record/*"> > <xsl:copy-of select="."/> > </xsl:template> > > </xsl:stylesheet> > > My output: > -------------- > <NAME> > <firstname>Joe</firstname> > <lastname>Smith</lastname> > </NAME> > <ADDRESS> > <street>35 Main Street</street> > <postal_code>TOEOPO</postal_code> > </ADDRESS> > > Can anyone tell me where I have gone wrong? I'm missing <id>, <type> etc, > and my xsl returns only 2 elements when more are sometimes required. > > Thanks for your time, > M Glenties > > _________________________________________________________________ > MSN. Calendar keeps you organized and takes the effort out of scheduling > get-togethers. > http://join.msn.com/?pgmarket=en-ca&page=byoa/prem&xAPID=1994&DI=1034&SU=http ://hotmail.com/enca&HL=Market_MSNIS_Taglines > Start enjoying all the benefits of MSN. Premium right now and get the > first two months FREE*.
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] Group various elements with e, M Glenties | Thread | RE: [xsl] Group various elements wi, cknell |
[xsl] Group various elements with e, M Glenties | Date | RE: [xsl] Group various elements wi, cknell |
Month |