RE: [xsl] Join elements by name, with spaces in between

Subject: RE: [xsl] Join elements by name, with spaces in between
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Mon, 12 Feb 2007 13:55:42 -0000
Try group-adjacent using a grouping key of

group-adjacent="if (. instance of element()) then name(.) else
name(following-sibling::*[1])"

This groups text nodes with the following element, which may not be what you
want. If you only want to retain text nodes if they fall between to element
nodes that are in the same group, you could try to expand the conditional
above.

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

> -----Original Message-----
> From: Yves Forkl [mailto:Y.Forkl@xxxxxx] 
> Sent: 12 February 2007 13:47
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] Join elements by name, with spaces in between
> 
> Hi,
> 
> in XSLT 2.0 I want to join adjacent sibling elements of the 
> same name, and spaces in between should be included on this 
> occasion. The elements may appear in any order. For instance, 
> if a, b and c instances may need joining, whereas x instances 
> do never repeat and thus are never joined (this is meant to 
> be one single line):
> 
> <e><x>x</x> <a>a1</a> <a>a2</a> <b>b</b> <c>c1</c> <c>c2</c> 
> <a>a3</a></e>
> 
> should become
> 
> <e><x>x</x> <a>a1 a2</a> <b>b</b> <c>c1 c2</c> <a>a3</a></e>
> 
> My idea is to use for-each-group, but I can't figure out how 
> to process the siblings and the possible space in between 
> only once and in the right order.
> 
> Can you help me?
> 
>    Yves

Current Thread