Subject: Re: [xsl] Converting milestone tags From: Michael Kay <mike@xxxxxxxxxxxx> Date: Thu, 14 Oct 2010 08:45:34 +0100 |
Michael Kay Saxonica
Hi everybody,
I am new to this list and apologize, if my question is an FAQ. I scanned the archives, but did not find a solution. The question arises in a TEI project where we have to switch from a chapter hierarchy to a page oriented form. The XSLT is done in multiple steps (a cocoon pipeline) and I use Saxon9.
Here is a simplified example of an infile:
<root> <p>text<span order="start"/>text<span order="end"/> text</p> <p>text<span order="start"/>text<span order="end"/> text text<span order="start"/>text<span order="end"/> text</p> <p>text text text<span order="start"/>text<span order="end"/></p> <p><span order="start"/>text<span order="end"/> text text text</p> </root>
which should result in the following output:
<root> <p>text<span>text</span> text</p> <p>text<span>text</span> text text<span>text</span> text</p> <p>text text text<span>text</span></p> <p><span>text</span> text text text</p> </root>
There my be an arbitrary number of<span order="begin"/> (and corresponding end milestone tags) in a p element. Furthermore, any "text" node may again contain markup which should be preserved in the output. I tried various approaches but I failed. Here is one of my attempts using sibling recursion ...
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <xsl:apply-templates/> </xsl:template> <xsl:template match="root"> <root><xsl:apply-templates/></root> </xsl:template> <xsl:template match="p"> <p> <xsl:apply-templates select="child::node()" mode="procp"/> </p> </xsl:template> <xsl:template match="span[@order='start']" mode="procp"> <span> <xsl:apply-templates select="following-sibling::node()[1][not(self::span)]" mode="procp"/> </span> <xsl:apply-templates select="following-sibling::node()[1]"/> </xsl:template> <xsl:template match="node()" mode="procp"> <xsl:copy-of select="."/> <xsl:apply-templates select="following-sibling::node()[1][not(self::span)]" mode="procp"/> </xsl:template> </xsl:stylesheet>
Any help would be greatly appreciated. Josef
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] Converting milestone tags, Josef Schneeberger | Thread | Re: [xsl] Converting milestone tags, Вячеслав Седов |
Re: [xsl] Unicode character decimal, Michael Kay | Date | [xsl] Customizing DocBook numbering, Néstor Amigo Cairo |
Month |