xsl-list
[Top] [All Lists]

RE: ancestor

2004-10-18 11:51:02
Peiyun,

At 02:40 PM 10/18/2004, you wrote:
>Has this test returned a value for you?
><xsl:if test="$inlineequation/@id=./@id"><xsl:value-of
>select="position()" /></xsl:if>
Yes, I got the one I needed.

>you want to compare its value to the value of the current elements id
attribute
>which would look like this:
><xsl:if test="$inlineequation/@id = current()/@id">
><xsl:value-of select="position()" />
></xsl:if>
Yes, you are right.

More generally, I'm trying to get the position of an element in a selected
list of elements. All elements are identifiable by   @id. If the element is
not selected (even if it matches the element name) in the list, then nothing
is output. I need the position of that element a few times in a matching
template for that element in different places.

If you can describe exactly the elements whose positions you want in a match pattern, I think the easiest way to get what you want is probably to use xsl:number:

<xsl:template match="inlineequation" mode="number">
  <xsl:number count="inlineequation[not(ancestor::table)]" level="any"/>
  <!-- any formatting you want always to appear with your number, can
       go in this template too -->
<xsl:template>

<xsl:template match="inlineequation[not(ancestor::table)]">
  <xsl:apply-templates select="." mode="number"/>
  ... do your other stuff ...
</xsl:template>

This is much simpler than the approach you are currently trying. It might or might not perform better, depending on the processor (xsl:number can sometimes be slow). Other contingencies will affect this: for example, if I were outputting all the equations together, the gathering and counting by position would be more attractive. If, however, I had to reach in and find the correct node to number from my bunch, I'd try this method first.

Note also that if you can't use a pattern to distinguish just the nodes you want, you have to use the more complex approach. (We saw that a couple of days ago with numbering tables and figures in order of first reference to them....)

Cheers,
Wendell


======================================================================
Wendell Piez                            
mailto:wapiez(_at_)mulberrytech(_dot_)com
Mulberry Technologies, Inc.                http://www.mulberrytech.com
17 West Jefferson Street                    Direct Phone: 301/315-9635
Suite 207                                          Phone: 301/315-9631
Rockville, MD  20850                                 Fax: 301/315-8285
----------------------------------------------------------------------
  Mulberry Technologies: A Consultancy Specializing in SGML and XML
======================================================================



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