This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
RE: container list display problem
- From: Wendell Piez <wapiez at mulberrytech dot com>
- To: xsl-list at lists dot mulberrytech dot com
- Date: Thu, 02 May 2002 15:46:38 -0400
- Subject: RE: [xsl] container list display problem
- Reply-to: xsl-list at lists dot mulberrytech dot com
Loren,
I hate to catch Mike out (hee :-), but when he writes:
>I haven't tried to understand your detailed logic but the
>parent::c02[last()] test looks wrong. A node has exactly one parent so the
>predicate [last()] is always true.
He's forgetting that when a predicate expression is reduced to a simple
number (as [last()] would be), it's inferred to be shorthand for
[position()=last()], so the problem isn't there. [XPath 2.4]
The basic problem of your tests using preceding-sibling:: might be
alleviated by shifting to the preceding:: axis. While I know EAD, like Mike
I can't see deeply into your problem without seeing an example of source
code. (As you know there are many ways to do EAD.)
You can test whether the parent of the <did> that houses the <container>
has the same number by going up *two* levels -- "../../@n = @n".
But it sounds like since the tracking of the microfilm reels has no
relation to the XML structure of the source, the preceding:: axis may be a
winner. If you want to check ancestors as well as preceding elements (you
may), check both preceding:: and ancestor:: axes.
Also, problems like yours are often made considerably easier with a
two-pass solution. This is especially the case if there's any sorting
involved (but it sounds like your stuff is already sorted). Even if this
isn't so for you, checking preceding:: can get expensive of processing
cycles (the axis goes all the way back to the start of the document), and
this can be alleviated by running two passes.
For more explicit help, please post a sample of your source (trimmed for
clarity) with the applicable bit of stylesheet.
Regards,
Wendell
At 05:42 PM 5/1/2002, you wrote:
>Michael,
>I am sure I'm doing this wrong as I am a newbie at coding XSL. I am trying
>to find if the parent of the container ¯ the parent of the <did> that
>houses the <container> tag ¯ also has the same container number. So if the
>subseries ends and another series starts, but they are both microfilmed on
>the same reel, then the reel number is not repeated.
>How do I test that in XSL? I tried your suggestion, but unfortunately it
>doesn't solve the problem.
>Thanks very much for responding so quickly. I am really amazed at the
>generosity of people on this list to help even newbies like me.
>Loren
>
>¯------------------------------------------------------------
>Date: Wed, 1 May 2002 15:01:55 +0100
>From: "Michael Kay" <michael.h.kay@ntlworld.com>
>Subject: RE: [xsl] container list display problem
>
> > I have been using a style sheet that supports an XML DTD
> > called EAD - Encoded Archival Description. ....
> >
> > <xsl:when test="(../preceding-sibling::c03[1]//did/container
> > @type='reel']=$reelnumber
> > or parent::c02[last()]/did/container[@type='reel']=$reelnumber)">
> >
>I haven't tried to understand your detailed logic but the
>parent::c02[last()] test looks wrong. A node has exactly one parent so the
>predicate [last()] is always true. You obviously don't want to select the
>"last parent" because there is only one. Perhaps you want to test whether
>the parent is the last child of its own parent? In that case the condition
>would be parent[not(following-sibling::*)].
======================================================================
Wendell Piez mailto:wapiez@mulberrytech.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
======================================================================
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list