Subject: [xsl] Positional Grouping From: Andy Carr1 <CARRA@xxxxxxxxxx> Date: Mon, 19 Feb 2007 14:29:44 +0000 |
Hi I currently use the following stylesheet to create sections based on Headings, which finds a Heading 1 style and processes subsequent paragraphs as children until another Heading 1 is encountered at which point the process starts over. I now find that I need to have sections-within-sections and I can't get it to work.. This is the stylesheet which works for sections but not sub-sections: <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:ns0="ns0" xmlns:w="w" xmlns:my="my:andy.xsl" exclude-result-prefixes="my ns0 w xs" version="2.0"> <xsl:output indent="yes"/> <xsl:function name="my:p-style" as="xs:string"> <xsl:param name="p" as="element()"/> <xsl:sequence select="$p/w:pPr/w:pStyle/@w:val"/> </xsl:function> <xsl:template match="ns0:Body"> <Body> <xsl:for-each-group select="w:p" group-starting-with="w:p[my:p-style(.) eq 'Heading1']"> <Section> <xsl:apply-templates select="current-group()"/> </Section> </xsl:for-each-group> </Body> </xsl:template> <xsl:template match="w:p[my:p-style(.) eq 'Heading1']"> <Title> <xsl:value-of select="w:r/w:t"/> </Title> </xsl:template> <xsl:template match="w:p[my:p-style(.) eq 'NumberedText']"> <List> <ListItem> <xsl:value-of select="w:r/w:t"/> </ListItem> </List> </xsl:template> <xsl:template match="w:p[my:p-style(.) eq 'Text']"> <Para> <xsl:value-of select="w:r/w:t"/> </Para> </xsl:template> </xsl:stylesheet> I now need to have subsections and sub-sub-sections in the Body Text, so XML like this: <ns0:Body> <w:p> <w:pPr> <w:pStyle w:val="Heading1"/> </w:pPr> <w:r> <w:t>Heading1 Text</w:t> </w:r> </w:p> <w:p> <w:pPr> <w:pStyle w:val="NumberedText"/> </w:pPr> <w:r> <w:t>Some list text</w:t> </w:r> </w:p> <w:p> <w:pPr> <w:pStyle w:val="Heading2"/> </w:pPr> <w:r> <w:t>Heading2 Text</w:t> </w:r> </w:p> <w:p> <w:pPr> <w:pStyle w:val="Text"/> </w:pPr> <w:r> <w:t>Some text</w:t> </w:r> </w:p> <w:p> <w:pPr> <w:pStyle w:val="Heading3"/> </w:pPr> <w:r> <w:t>Heading3 Text</w:t> </w:r> </w:p> <w:p> <w:pPr> <w:pStyle w:val="Text"/> </w:pPr> <w:r> <w:t>Some more text</w:t> </w:r> </w:p> <w:p> <w:pPr> <w:pStyle w:val="Heading1"/> </w:pPr> <w:r> <w:t>Another Heading1 Text</w:t> </w:r> </w:p> <w:p> <w:pPr> <w:pStyle w:val="Text"/> </w:pPr> <w:r> <w:t>Some more text</w:t> </w:r> </w:p> <w:p> <w:pPr> <w:pStyle w:val="NumberedText"/> </w:pPr> <w:r> <w:t>Some more list text</w:t> </w:r> </w:p> </ns0:Body> Will produce output like this: <Body> <Section> <Title>Heading1 Text</Title> (from the first Heading1) <List> <ListItem>Some list text</List> </List> <Section> <Title>Heading2 Text</Title> (from the first Heading 2) <Para>Some text</Para> <Section> <Title>Heading 3 Text</Title> (from the first Heading 3) <Para>Some more text</Para> </Section> </Section> </Section> <Section> <Title>Another Heading Text</Title> (from the second Heading1) <Para>Some more text</Para> <List> <ListItem>Some more list text</List> </List> </Section> </Body> I've tried modifications to the XSL at the top of this note without success. Any more help would be appreciated. Regards Andy Andy Carr IT Specialist Tel: Internal - 298037 External - 01252 558037 Mail Point M1C IBM Application Services Meudon House, Meudon Avenue, Farnborough, GU14 7NB (Notes) Andy Carr1/UK/IBM@IBMGB (Internet)CARRA@xxxxxxxxxx Unless stated otherwise above: IBM United Kingdom Limited - Registered in England and Wales with number 741598. Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire PO6 3AU
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] trying to create repeatable i, Peter Guillam | Thread | Re: [xsl] Positional Grouping, Florent Georges |
Re: [xsl] XHTML html validation, M. David Peterson | Date | [xsl] finding the last element with, Robert Walpole |
Month |