[xsl] Test for preceding-sibling and text

Subject: [xsl] Test for preceding-sibling and text
From: "Ragulf Pickaxe" <jawxml@xxxxxxxxxxx>
Date: Wed, 10 Nov 2004 16:03:55 +0000
Hi all,

I have a template that croups consecutive elements of a certain type. The problem is that it also groups these elements if there is text between these elements. How do I avoid that?

Input xml
<?xml version="1.0"?>
<root>
 <X>
   Some text
   <A>
     Something in A
   </A>
   <A>
     Something in A
   </A>
   <B>
     Something in B
   </B>
   <A>
     Something in A
   </A>
 </X>
 <Y>
   Some text
   <A>
     Something in A
   </A>
   Some text between two A elements
   <A>
     Something in A
   </A>
 </Y>
</root>

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; version="1.0">
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>


<xsl:template match="X">
 <xsl:apply-templates/>
</xsl:template>

<xsl:template match="Y">
 <xsl:apply-templates/>
</xsl:template>

<xsl:template match="A">
<!-- Do something here -->
<xsl:choose>
<xsl:when test="not(preceding-sibling::*[1][self::A])">
<!-- This test correctly does not choose the second A under X, but also ignores the second A under Y which I do not want -->
</xsl:when>
<xsl:otherwise> </xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>



I can see that I need to do something in this test "not(preceding-sibling::*[1][self::A])", but I do not know how.


I hope that I have explained the problem well enough, and that somebody can help me.
Regards,
Ragulf Pickaxe :|


_________________________________________________________________
Express yourself instantly with MSN Messenger! Download today it's FREE! http://messenger.msn.com/


Current Thread