Subject: RE: [xsl] processing following-siblings to a point From: "Michael Kay" <mike@xxxxxxxxxxxx> Date: Fri, 10 Jul 2009 00:15:20 +0100 |
> I've run into a structure that I must transform that I just > haven't found a solution for. XSL 1.0 only. (I just don't > have the proficiency for 2.0 yet). I think you've got that the wrong way around. With positional grouping in XSLT 2.0 (<xsl:for-each-group group-starting-with="title">) this is quite an easy problem. In XSLT 1.0 you need to write recursive templates, which requires a much higher level of proficiency in the language. Regards, Michael Kay http://www.saxonica.com/ http://twitter.com/michaelhkay > > I'm transforming what was a rather flat SGML structure to an > XML structure. Here's the input structure: > > <gen> > <title>TITLE_1</title> > <subtitle>SUBTITLE_1</subtitle> > <para>Text.</para> > <para>Text.</para> > <para>Text.</para> > <title>TITLE_2</title> > <subtitle>SUBTITLE_2</subtitle> > <para>Text.</para> > <para>Text.</para> > <para>Text.</para> > <para>Text.</para> > <title>TITLE_2</title> > <subtitle>SUBTITLE_2</subtitle> > <para>Text.</para> > <para>Text.</para> > <para>Text.</para> > <para>Text.</para> > </gen> > > Resulting structure tree: > > <para0> > <title>TITLE_1</title> > <subpara1> > <title>SUBTITLE_1</title> > <para>Text.</para> > <para>Text.</para> > <para>Text.</para> > </subpara1> > </para0> > <para0> > <title>TITLE_2</title> > <subpara1> > <title>SUBTITLE_2</title> > <para>Text.</para> > <para>Text.</para> > <para>Text.</para> > <para>Text.</para> > </subpara1> > </para0> > <para0> > <title>TITLE_3</title> > <subpara1> > <title>SUBTITLE_3</title> > <para>Text.</para> > <para>Text.</para> > <para>Text.</para> > <para>Text.</para> > <para>Text.</para> > </subpara1> > </para0> > > My template (or at least the important part). > > <xsl:template match="gen/title" mode="move"> > > <para0> > <title> > <xsl:value-of select="."/> > </title> > <subpara1> > <title><xsl:value-of > select="following-sibling::subtitle[1]"/></title> > <xsl:apply-templates > select="following-sibling::para"/> > </subpara1> > </para0> > > My problem is with the <xsl:apply-templates > select="following-sibling::para"/> line. Of course, all of > the para elements are following siblings of all the gen/title > elements. How can I express the <apply-templates> to process > only the para element siblings BEFORE the next following > title sibling. (This is difficult because EVERYTHING is a > sibling of everything else). > > Charles Flanders > IETM Developer
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] processing following-sibl, C. M. Sperberg-McQue | Thread | Re: [xsl] processing following-sibl, Brandon Ibach |
Re: [xsl] Difference between xmlns:, C. M. Sperberg-McQue | Date | RE: [xsl] VB 2008 Passing Paramete, Michael Kay |
Month |