Re: [xsl] Processing data after an empty tag.

Subject: Re: [xsl] Processing data after an empty tag.
From: "Joris Gillis" <roac@xxxxxxxxxx>
Date: Tue, 01 Mar 2005 18:07:58 +0100
Tempore 15:41:15, die 03/01/2005 AD, hinc in xsl-list@xxxxxxxxxxxxxxxxxxxxxx scripsit McKinstry, Scott A <scott.a.mckinstry@xxxxxxxx>:

SGML Input Supplied:

<para>
<text> The following is a list <style type="list"></style><style type="para"></style>List Item One.
<style type="para"></style>List Item Two.<style type="para"></style>List Item Three</text>
</para>

XML Output Required:

<para>The following is a list.
	<itemizedlist>
		<listitem><para>List Item One</para></listitem>
		<listitem><para>List Item Two</para></listitem>
		<listitem><para>List Item Three</para></listitem>
	</itemizedlist>
</para>

Hi,


This could be treated as a grouping problem.
Here's a working solution:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
<xsl:output indent="yes" />


<xsl:key name="listText" match="node()[not(self::style)]" use="generate-id(preceding-sibling::style[@type='para'][1])"/>
<xsl:key name="listHead" match="style[@type='para']" use="generate-id(preceding-sibling::style[@type='list'][1])"/>


<xsl:template match="para">
	<xsl:copy>
		<xsl:apply-templates/>
	</xsl:copy>
</xsl:template>

<xsl:template match="text">
<xsl:apply-templates select="node()[not(preceding-sibling::style[@type='list'])] | style[@type='list']"/>
</xsl:template>


<xsl:template match="style[@type='list']">
	<itemizedlist>
		<xsl:apply-templates select="key('listHead',generate-id())"/>
	</itemizedlist>
</xsl:template>

<xsl:template match="style">
	<listitem>
		<xsl:element name="{@type}">
			<xsl:apply-templates select="key('listText',generate-id())"/>
		</xsl:element>
	</listitem>
</xsl:template>

</xsl:stylesheet>


regards, -- Joris Gillis (http://www.ticalc.org/cgi-bin/acct-view.cgi?userid=38041) "Et ipsa scientia potestas est" - Francis Bacon , Meditationes sacrae

Current Thread