Altova Mailing List Archives>Archive Index >microsoft.public.xsl Archive Home >Recent entries >Thread Prev - Transforming multiple elements to a single element >Thread Next - Re: Transforming multiple elements to a single element Re: Transforming multiple elements to a single elementTo: NULL Date: 4/9/2009 12:53:00 PM Michael Powe wrote: > Hello, > > I have input structure like this: > > <entry> > <dimension name="dimName" value="dimValue"/> > <dimension name="dimName2" value="dimValue2"/> > <metric name="metName" value="metValue"/> > <metric name="metName2" value="metValue2"/> > </entry> > > I need to transform this entry into this format: > > <row> > <field name="dimName" value="dimValue"/> > <field name="metName" value="metValue"/> > <field name="metName2" value="metValue2"/> > </row> > <row> > <field name="dimName2" value="dimValue2"/> > <field name="metName" value="metValue"/> > <field name="metName2" value="metValue2"/> > </row> > > This seems to be a nontrivial problem. I can easily loop through the > entry node and retrieve the dimension/metric attributes and create the > field elements. However, I don't understand how in XSLT to process > the dimension, jump to the metrics and process those, then return to > the next dimension element, and so forth. Further, the 2 + 2 in this > case is simply a test document. The production data could have 1-7 > dimension elements and 1-50 metric elements in each entry node. I would simply process each dimension element and transform it into a row and then inside each row you process the element itself and all its metric siblings: <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output indent="yes"/> <xsl:template match="entry"> <xsl:apply-templates select="dimension"/> </xsl:template> <xsl:template match="dimension"> <row> <xsl:apply-templates select=". | ../metric" mode="field"/> </row> </xsl:template> <xsl:template match="dimension | metric" mode="field"> <field name="{@name}" value="{@value}"/> </xsl:template> </xsl:stylesheet> As the dimension element is processed twice you need to use a mode to distinguish those steps but other than that there is nothing complicated about that stylesheet. -- Martin Honnen --- MVP XML http://JavaScript.FAQTs.com/ | ||||||
| Company | Legal | Press | Partners | Careers | Sitemap | Contact Us | Altova Blog | Mobile | Full Site | |||
|
