Hey - that did the trick!
Thanks everyone for all of your thoughtful input - it took David reading my
mind that the B nodes had other nodes interspersed between them to come up
w/ a working solution.
This test did just what I needed it to:
-------------------------
test="generate-id(.) =
generate-id(following-sibling::A[1]/preceding-sibling::B[1])"
-------------------------
Thanks again,
Steve
-----Original Message-----
From: McNally, David [mailto:David(_dot_)McNally(_at_)moodys(_dot_)com]
Sent: Wednesday, June 30, 2004 9:09 AM
To: 'xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com'
Subject: RE: [xsl] Testing for a following sibling node type that occurs a t
a varied position
Another option would be to predefine the nodeset of eligible B nodes, using
Michael's suggestion, and then in the foreach just test to see whether each
B is in that nodeset.
Alternatively, although it was not specified in the example XML, if there
could be other non-A and non-B nodes interspersed among the B's, then just
testing the first following-sibling won't work. In that case, perhaps
something like this would work:
test="generate-id(.) =
generate-id(following-sibling::A[1]/preceding-sibling::B[1])"
David.
--
David McNally Moody's Investors Service
Senior Software Engineer 99 Church St, NY NY 10007
David(_dot_)McNally(_at_)Moodys(_dot_)com 212-553-7475
-----Original Message-----
From: Wendell Piez [mailto:wapiez(_at_)mulberrytech(_dot_)com]
Sent: Wednesday, June 30, 2004 11:31 AM
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: RE: [xsl] Testing for a following sibling node type
that occurs a t a varied position
At 03:20 AM 6/30/2004, someone wrote:
I changed your test a little, so I detect all the last 'B'
by testing
if the name of the actual node differs from the name of the
following
node. I hope this will help you
-----------------------------------------
<xsl:template match="root">
<xsl:for-each select="B">
<xsl:if test="not(name() = name(following-sibling::*))">
<xsl:value-of select="." />
</xsl:if>
</xsl:for-each>
</xsl:template>
-----------------------------------------
Given that it is known, in this test, that the context node
is a 'B', this
could be
<xsl:for-each select="B">
<xsl:if test="not(following-sibling::B)">
<xsl:value-of select="." />
</xsl:if>
</xsl:for-each>
.. but I don't think it answers the OP's requirement.
As I recall, Mike suggested child::A/preceding-sibling::B[1],
which isn't
considered adequate because the context node is already a B,
not the parent
of the As and Bs. So the requirement is not to *select* all B
nodes that
have no Bs after them before As, but to test true on a B
context node that
is (as the OP said) "the last 'B' node that occurs before the
next 'A' node".
In other words, the context node is a B, and the test should
detect that
the directly following sibling is not a B, but that there is
an A following
sibling.
This is
test="following-sibling::*[1][not(self::B)] and following-sibling::A"
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
======================================================================
--+------------------------------------------------------------------
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>
--+--
---------------------------------------
The information contained in this e-mail message, and any attachment
thereto, is confidential and may not be disclosed without our express
permission. If you are not the intended recipient or an employee or agent
responsible for delivering this message to the intended recipient, you are
hereby notified that you have received this message in error and that any
review, dissemination, distribution or copying of this message, or any
attachment thereto, in whole or in part, is strictly prohibited. If you
have received this message in error, please immediately notify us by
telephone, fax or e-mail and delete the message and all of its attachments.
Thank you.
Every effort is made to keep our network free from viruses. You should,
however, review this e-mail message, as well as any attachment thereto, for
viruses. We take no responsibility and have no liability for any computer
virus which may be transferred via this e-mail message.
--+------------------------------------------------------------------
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>
--+--
****************************************************************************
This email may contain confidential material.
If you were not an intended recipient,
please notify the sender and delete all copies.
We may monitor email to and from our network.
****************************************************************************