xsl-list
[Top] [All Lists]

get the first of the following with Attribute equals

2003-02-04 08:57:26
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