|
[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] RE: Enclosing following-sibling nodes before the next
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
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|

Cart








