xsl-list
[Top] [All Lists]

RE: Group problem with blank elements

2005-06-30 16:07:44
When you do xsl:value-of select="." directly inside xsl:for-each-group, "."
refers to the first item in the group. You want to output the concatenation
of all the items in the group, which you can do with

string-join(current-group(), ' ')

Also, each empty element that's followed by another empty element is being
treated as a group containing a single member.

I think I would tackle this using

 group-adjacent="string-length(.)=0"

This will create a sequence of groups, alternating a sequence of empty
elements with a sequence of non-empty elements. You can then test if the
first element in the current group is non-empty, and if so, output the
string-join as above.

Michael Kay
http://www.saxonica.com/

-----Original Message-----
From: Ed Yau [mailto:eyau(_at_)vstrading(_dot_)co(_dot_)uk] 
Sent: 30 June 2005 18:31
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] Group problem with blank elements

Hiya,

Having loads of trouble with this.  On the face of it a really easy
problem.
I have a bunch of elements like so:

<statement-message>Your account is now seriously in arrears.
To</statement-message>

<statement-message>avoid further action a payment 
of</statement-message>

<statement-message>$82.00 is required immediately.
Any</statement-message>

<statement-message>purchases will now be declined.</statement-message>

<statement-message>
</statement-message>

<statement-message>  More text </statement-message>

<statement-message>
</statement-message>

<statement-message>
</statement-message>

<statement-message>
</statement-message>

I want to strip out the empty tags and merge adjacent elements as
follows:

<statement-message> Your account is now seriously in arrears. To avoid
further action a payment of
82.00 is required immediately. Any purchases will now be
declined.</statement-message>

<statement-message>  More text </statement-message>

My code at the moment is:
<xsl:for-each-group select="statement-message"
group-ending-with="statement-message[string-length(normalize-s
pace(follo
wing-sibling::statement-message[1]))=0]">
      <statement-message>
              <xsl:value-of select="."/>
      </statement-message>
</xsl:for-each-group>

My understanding of this is that it should start grouping from the 1st
statement message, with the groups ending as soon as an empty 
element is
reached.  The empty tags at the end would still be there, but at least
it should do the merge.  However, the result looks like:

     <statement-message>Your account is now seriously in arrears.
To</statement-message>
     <statement-message>
     </statement-message>
     <statement-message>  More text </statement-message>
     <statement-message>
     </statement-message>
     <statement-message>
     </statement-message>
     <statement-message>
     </statement-message>

So where am I going wrong?

Ed


--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: 
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--





--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



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