xsl-list
[Top] [All Lists]

Test for preceding-sibling and text

2004-11-10 09:03:55
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/



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