xsl-list
[Top] [All Lists]

Re: get the first of the following with Attribute equals

2003-02-04 10:02:04
Cedric,

One solution to your problem is to relate each 'paragraphe' element to the 'title' element to which it "belongs" using a key:

<xsl:key name="paras-by-title" match="element[(_at_)type='paragraphe']"
 use="generate-id(preceding-sibling::element[(_at_)type='title][1])"/>

Then instead of selecting "following::element[(_at_)type='paragraphe']" in your for-each, generate your output for your title, and then select the paragraphs that belong to it using the key function:

select="key('paras-by-title', generate-id())"

which returns only paragraph elements that follow the title without any intervening title elements (which would come in on the following or following-sibling axes).

This method is described in the XSL FAQ under the heading "Flat file transformation": http://www.dpawson.co.uk/xsl/sect2/flatfile.html

I hope that helps!
Wendell

At 10:57 AM 2/4/2003, you wrote:
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>

[snip]

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....


======================================================================
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