xsl-list
[Top] [All Lists]

RE: Testing for a following sibling node type that occurs a t a varied position

2004-06-30 09:22:27
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.

****************************************************************************




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