I suspect that it's possible to do this with a single Tennison-esqe
select expression, but it's simpler to just ignore your dtd expression
and rephrase your English descriptin as an xsl:choose
<xsl:choose>
<!--
If the chapter
contains
a section or simplesect, the para can be inserted right before it
-->
<xsl:when test="section|simplesect">
<xsl:copy-of select="(section|simplesect)[1]/preceding-sibling::*"/>
<para>new stuff</para>
<xsl:copy-of select="(section|simplesect)[1]"/>
<xsl:copy-of select="(section|simplesect)[1]/following-sibling::*"/>
</xsl:when>
<!--
but if
not, it
has to be the last element of chapter, only followed by index elements if
present.
-->
<xsl:otherwise>
<xsl:copy-of select="*[not(self::index)[last()]/preceding-sibling::*"/>
<para>new stuff</para>
<xsl:copy-of select="*[not(self::index)[last()]"/>
<xsl:copy-of select="*[not(self::index)[last()]/following-sibling::*"/>
<xsl:otherwise>
</xsl:choose>
untested...
you could use varables or keys to save looking up the insertion points
three times on each branch.
David
_____________________________________________________________________
This message has been checked for all known viruses by Star Internet
delivered through the MessageLabs Virus Scanning Service. For further
information visit http://www.star.net.uk/stats.asp or alternatively call
Star Internet for details on the Virus Scanning Service.
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list