Re: [xsl] Positional tests

Subject: Re: [xsl] Positional tests
From: Wendell Piez <wapiez@xxxxxxxxxxxxxxxx>
Date: Wed, 02 Mar 2005 13:46:42 -0500
Hi Paul,

At 01:17 PM 3/2/2005, you wrote:
I need to find out if a block element that I process is the first one with
respect to its ancester S1, S2 or S3 elements. The hierarchy looks something
like this:

        <root>
          <S1>
            <block> <<
            <S2>
                <block> <<
                <block>
              <S3>
                <body>
                  <block> <<
                  <p>
                <block>
                </body>
                </S3>
            </S2>
          </S1>
        </root>

I have tried:

        test=". = ancestor::S3//block[1] or . = ancestor::S2//block[1] or .
= ancestor::S1//block[1]"

But this slows down processing enormously.

Yes, it'll be slow (it does some heavy-duty tree traversal) -- and it won't work, either. You can't test node identity with the "=" operator: it compares string values.


"not(preceding-sibling::block)" will return true if the current node has no preceding sibling blocks. Is your requirement different from this, and if so, how?

For example, when you have

<S3>
  <block/>
  <body>
    <block/>
  </body>
</S3>

both blocks here pass the test I offered. Should they? (The second is not "first with respect to its S3 ancestor".) Is your data constrained such that this isn't a problem?

Cheers,
Wendell


====================================================================== Wendell Piez mailto:wapiez@xxxxxxxxxxxxxxxx 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 ======================================================================

Current Thread