xsl-list
[Top] [All Lists]

[xsl] Fine tuning a template match

2006-07-30 20:57:30
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[(_at_)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[(_at_)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[(_at_)ID]" mode="tblhd">
...
</xsl:template>

<!-- hyperlink targets in rows -->
<xsl:template match="A[(_at_)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



--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--

<Prev in Thread] Current Thread [Next in Thread>