xsl-list
[Top] [All Lists]

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

2004-06-30 09:08:43
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.



<Prev in Thread] Current Thread [Next in Thread>
  • RE: Testing for a following sibling node type that occurs a t a varied position, McNally, David <=