Subject: RE: [xsl] Enclosing following-sibling nodes before the next element of the same type From: <Jarno.Elovirta@xxxxxxxxx> Date: Fri, 12 Nov 2004 08:05:11 +0200 |
Hi, > How can I transform the following XML: > > <parent><elem/>text<br/><elem/>word<hr/>word<elem/></parent> > > to > > <parent> > <elem>text<br/></elem> > <elem>word<hr/>word</elem> > </parent> > > I'd like <elem> to enclose all its following-siblings up to > either the the next > <elem> or the end tag of its parent element. > How can I do this in XSLT ? Anyone know how can I select these nodes ? This is a FAQ, a grouping problem. See Jeni's pages <http://jenitennison.com/xslt/grouping> for more info. <xsl:template match="parent"> <xsl:copy> <xsl:apply-templates select="elem[1]"/> </xsl:copy> </xsl:template> <xsl:template match="elem"> <xsl:if test="following-sibling::elem[1]"> <xsl:copy> <xsl:apply-templates select="following-sibling::node()[1]" mode="group"/> </xsl:copy> <xsl:apply-templates select="following-sibling::elem[1]"/> </xsl:if> </xsl:template> <xsl:template match="node()" mode="group"> <xsl:copy> <xsl:apply-templates select="node()"/> </xsl:copy> <xsl:apply-templates select="following-sibling::node()[1]" mode="group"/> </xsl:template> <xsl:template match="elem" mode="group"/> <xsl:template match="@* | node()"> <xsl:copy> <xsl:apply-templates select="@* | node()"/> </xsl:copy> </xsl:template> Cheers, Jarno
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] Enclosing following-sibling n, mhleung | Thread | RE: [xsl] xslt2 general steps., Pawson, David |
[xsl] Enclosing following-sibling n, mhleung | Date | RE: [xsl] XML Schema + constraint v, Jarno.Elovirta |
Month |