xsl-list
[Top] [All Lists]

RE: get the first of the following with Attribute equals

2003-02-04 10:32:12
The trick here is 

following-sibling::paragraphe[generate-id(preceding-sibling::title[1]) =
generate-id(current())]

That is, select those following paragraphs whose immediately preceding
title is the node you are currently at.

In XSLT 2.0 you can use

<xsl:for-each-group select="*" 
              group-starting-with="title">

Michael Kay
Software AG
home: Michael(_dot_)H(_dot_)Kay(_at_)ntlworld(_dot_)com
work: Michael(_dot_)Kay(_at_)softwareag(_dot_)com 

-----Original Message-----
From: owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com 
[mailto:owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com] On Behalf Of 
Cedric Claus
Sent: 04 February 2003 15:57
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] get the first of the following with Attribute equals


Hi, I have the following XML:

<document xmlns:fo="http://www.w3.org/1999/XSL/Format";>
   <elements>
       <element type="title" position="1">text1</element>
       <element type="paragraphe" position="2">text2</element>
       <element type="paragraphe" position="3">text3</element>
       <element type="title" position="4">text4</element>
       <element type="paragraphe" position="5">text5</element>
       <element type="paragraphe" position="6">text6</element>
       <element type="title" position="7">text7</element>
       <element type="paragraphe" position="9">text9</element>
       <element type="paragraphe" position="10">text10</element>
       <element type="title" position="11">text11</element>
       <element type="paragraphe" position="12">text12</element>
       <element type="paragraphe" position="13">text13</element>
   </elements>
</document>

---------------XSL--------------

xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; 
xmlns:fo="http://www.w3.org/1999/XSL/Format";>
   <xsl:template match="/">
       <document>
           <xsl:apply-templates/>
       </document>
   </xsl:template>
   <xsl:template match="document/elements/element">

       <xsl:if test="./@type='title'">
           <element>
               <group>
                   <title>
                       <xsl:value-of select="."/>
                   </title>
                                     <xsl:for-each 
select="following::element[(_at_)type='paragraphe']">
                                 <xsl:if test="./@position &lt; 
following::element [(_at_)type='title']/@position">
                           <paragraphe>
                               <xsl:value-of select="."/>
                           </paragraphe>
                       </xsl:if>
                   </xsl:for-each>
                   <xsl:if 
test="not(following-sibling::element[(_at_)type='title'])">
                       <xsl:for-each 
select="following::element[(_at_)type='paragraphe']">
                           <paragraphe>
                               <xsl:value-of select="."/>
                           </paragraphe>
                       </xsl:for-each>
                   </xsl:if>
               </group>
           </element>
       </xsl:if>
   </xsl:template>
</xsl:stylesheet>

I want to have only the *first *following with the attribute 
Type = title or with my test : <xsl:if test="./@position &lt; 
following::element 
[(_at_)type='title']/@position"> I have : <document 
xmlns:fo="http://www.w3.org/1999/XSL/Format";>
   <element>
       <group>
           <title>text1</title>
           <paragraphe>text2</paragraphe>
           <paragraphe>text3</paragraphe>
           <paragraphe>text5</paragraphe>
           <paragraphe>text6</paragraphe>
           <paragraphe>text9</paragraphe>
           <paragraphe>text10</paragraphe>
       </group>
   </element>
   ...
What I want is only text2 and text 3, I don't want text5 --> 
text10 with 
this title

Any Idea? I become nuts....









 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list



 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list