Subject: [xsl] Fine tuning a template match From: "Trevor Nicholls" <trevor@xxxxxxxxxxxxxxxxxx> Date: Mon, 31 Jul 2006 15:56:49 +1200 |
Hi I am trying to transform some FrameMaker-generated XML that contains lots of tables. The tables optionally include a set of titles, and these titles are usually wrapped in a caption element - but sometimes the caption element also includes all the table rows :-( Scattered "randomly" through the tables we have <A id=> elements and my requirement is to process all title-related <A> elements before the table, and all row-related <A> elements within their row. There are <A id=> elements elsewhere in the document, hence some of the conditions in the template which is designed to process them. The following extract successfully identifies the table types and the <A> elements to be processed at the head of the tables: ============== <!-- tables --> <!-- some tables have one caption child and multiple row children--> <xsl:template match="TABLE[CAPTION and ROW]"> <xsl:apply-templates select="CAPTION//A[@ID]" mode="tblhd"/> <xsl:element name="table">...</xsl:element> </xsl:template> <!-- others have all the rows inside the caption --> <!-- in this case the title is wrapped in a titlelist --> <xsl:template match="TABLE[CAPTION/ROW]"> <xsl:apply-templates select="CAPTION/TableTitleList//A[@ID]" mode="tblhd" /> <xsl:element name="table">...</xsl:element> </xsl:template> <!-- and others have no caption at all --> <xsl:template match="TABLE"> <xsl:element name="table">...</xsl:element> </xsl:template> ... <!-- hyperlink targets in headings --> <xsl:template match="A[@ID]" mode="tblhd"> ... </xsl:template> <!-- hyperlink targets in rows --> <xsl:template match="A[@ID][not(@CLASS='XRef')][not(ancestor::FOOTNOTES)]"> ... </xsl:template> ============== As it stands this last template which matches all ID'ed "A" elements in tables causes these elements to be processed twice - once by the moded template and once by the standard template, so that the XML generated for a hyperlink target appears both before the <table> element and once again inside it. So I need to fine tune the final template somehow: I need to exclude the pre-table context from the un-moded template. Does that make sense? Cheers Trevor
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] dynamic template caller p, Mukul Gandhi | Thread | Re: [xsl] Fine tuning a template ma, Jay Bryant |
RE: [xsl] Understanding XPath conta, Michael Kay | Date | [xsl] Transformation assistance ple, smithbm33 |
Month |