Subject: Re: [xsl] Fine tuning a template match From: "Jay Bryant" <jay@xxxxxxxxxxxx> Date: Mon, 31 Jul 2006 00:00:11 -0500 |
Hi, Trevor, I sympathize, as I am doing FrameMaker-to-DocBook for my current client. If I understand correctly, you want to narrow the XRefs within tables. If so, could you add [ancstor::TABLE]: <!-- hyperlink targets in rows --> <xsl:template match="A[ancestor::TABLE][@ID][not(@CLASS='XRef')][not(ancestor::FOOTNOTES)] "> That would ensure that this template matches only A elements that somewhere within tables. Jay Bryant Bryant Communication Services ----- Original Message ----- From: "Trevor Nicholls" <trevor@xxxxxxxxxxxxxxxxxx> To: <xsl-list@xxxxxxxxxxxxxxxxxxxxxx> Sent: Sunday, July 30, 2006 10:56 PM Subject: [xsl] Fine tuning a template match > 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 -> |
---|---|---|
[xsl] Fine tuning a template match, Trevor Nicholls | Thread | RE: [xsl] Fine tuning a template ma, Trevor Nicholls |
Re: [xsl] Transformation assistance, Jay Bryant | Date | RE: [xsl] Fine tuning a template ma, Trevor Nicholls |
Month |