Subject: Re: [xsl] Need help with XSL and XPath From: "Jay Bryant" <jay@xxxxxxxxxxxx> Date: Mon, 22 May 2006 18:28:29 -0500 |
Here's one way to do it: <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" indent="yes"/> <xsl:template match="/"> <out> <xsl:for-each select="data/element[not(number = following::number)]"> <xsl:sort select="number"/> <xsl:variable name="this-number" select="number"/> <entry number="{$this-number}"> <xsl:copy-of select="/data/element[number = $this-number]/name"/> </entry> </xsl:for-each> </out> </xsl:template> </xsl:stylesheet> I tested against the following data with Saxon and Xalan: <data> <element> <name>Oscar</name> <number>1</number> </element> <element> <name>Mike</name> <number>1</number> </element> <element> <name>Bob</name> <number>2</number> </element> <element> <name>George</name> <number>2</number> </element> <element> <name>Tom</name> <number>3</number> </element> <element> <name>Dick</name> <number>3</number> </element> <element> <name>Harry</name> <number>3</number> </element> </data> It produced the following output: <?xml version="1.0" encoding="UTF-8"?> <out> <entry number="1"> <name>Oscar</name> <name>Mike</name> </entry> <entry number="2"> <name>Bob</name> <name>George</name> </entry> <entry number="3"> <name>Tom</name> <name>Dick</name> <name>Harry</name> </entry> </out> I'm sure other ways exist. Jay Bryant Bryant Communication Services ----- Original Message ----- From: "Lassi Seppdld" <lsseppal@xxxxxxxxx> To: <xsl-list@xxxxxxxxxxxxxxxxxxxxxx> Sent: Monday, May 22, 2006 5:48 PM Subject: [xsl] Need help with XSL and XPath > Here's a simplified description of my problem: > > I've got an XML document with multiple entries of <element> as shown > below. The <name>s are unique, but the <number> can be same for > mulpitle entries of <element>. The XML document isn't sorted in anyway. > > <element> > <name>name</name> > <number>1</number> > </element> > > Now I need the XSL stylesheet to print out something like this: > > number 1 > name1 > name4 > name7 > > number 25 > name2 > name3 > > number 100 > name5 > name6 > > So each "number X" is only printed once and then all the <element>s > that have the number X in the <number> tags are printed below that. > Then the next biggest number is printed and so on. > > Any advice? > > -- > Lassi
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] Need help with XSL and XPath, Lassi Seppälä | Thread | Re: [xsl] Need help with XSL and XP, G. Ken Holman |
[xsl] Need help with XSL and XPath, Lassi Seppälä | Date | [xsl] Passing variables into XSLT v, Duncan Anker |
Month |