Subject: Re: [xsl] grouping based on string but with child nodes From: "Andrew Welch" <andrew.j.welch@xxxxxxxxx> Date: Mon, 13 Oct 2008 16:17:57 +0100 |
2008/10/13 James Cummings <cummings.james@xxxxxxxxx>: > Hiya, > > I have some old EAD XML that I'm trying to convert to a slightly > better form and what I want to take is something like this: > > <unittitle> > <title>Calendarial rules. Prognostics. || Alcuin, > <emph render="italic">Quaestiones in Genesim</emph>. || > Glossaries. || <emph render="italic">Ps</emph>.-Cicero, > <emph render="italic">Synonyma ad Lucium Veturium</emph>, with > added Latin-Old English > glossaries extracted from the Grammar and Glossary of Flfric. > </title> > <!-- other elements --> > </unittitle> > > where several titles are grouped together into a single title element > and delineated by two vertical bars || and split this into properly > grouped elements without loss of the <emph> elements. I'll be > combining this with some other similarly split up data (about time > periods of the works) into a new structure. So desired output (in a > variable since I then need to count them and create those other > structures one for each of these) something like: > > <unittitle> > <title>Calendarial rules. Prognostics.</title> > <title>Alcuin, <emph render="italic">Quaestiones in Genesim</emph>. </title> > <title>Glossaries. </title> > <title> > <emph render="italic">Ps</emph>.-Cicero, > <emph render="italic">Synonyma ad Lucium Veturium</emph>, > with added Latin-Old English glossaries extracted from the Grammar > and Glossary of Flfric. </title> > <!-- other elements --> > </unittitle> > > I've been assuming that this is a two-pass problem where I have to > replace the '||' with some empty XML element and then group-by that > element? If that is the case what is the best way to replace these > for grouping? Or is it possible to do this all-in-one? XSLT2 > solution obviously desired to avoid too much recursion. :-) Yes, use 2 passes, it will help you diagnose problems in the 2nd pass much more easily. The first pass is an idenity transform with: <xsl:template match="title"> <xsl:for-each select="tokenize(., '||')> <title><xsl:value-of select="."/></title> For the second pass it's not clear to me how you want to group them, so maybe post back with an example if you need to. -- Andrew Welch http://andrewjwelch.com Kernow: http://kernowforsaxon.sf.net/
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] grouping based on string but , James Cummings | Thread | Re: [xsl] grouping based on string , James Cummings |
[xsl] grouping based on string but , James Cummings | Date | Re: [xsl] grouping based on string , James Cummings |
Month |