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
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--