[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: XTTE1100: A sequence of more than one item is not
So here is the complete solution to this problem, using XSLT 3.0: <xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output omit-xml-declaration="yes" indent="yes"/> <xsl:template match="/*"> <xsl:for-each-group select="*" group-adjacent="serialize(.)"> <group> <xsl:sequence select="current-group()"/> </group> </xsl:for-each-group> </xsl:template> </xsl:stylesheet> When this transformation is applied on the provided (and corrected from severe malformities) XML document: <A> <!-- start group --> <B> <C/> <D/> </B> <B> <C/> <D/> </B> <!-- end group --> <B/> *** singleton group <C/> *** singleton group <!-- start group --> <D> <E/> <E> <F/> </E> </D> <D> <E/> <E> <F/> </E> </D> <!-- end group --> <!-- start group --> <B> <C/> <D/> </B> <B> <C/> <D/> </B> <!-- end group --> </A> the wanted, correct result is produced: <group> <B> <C/> <D/> </B> <B> <C/> <D/> </B> </group> <group> <B/> </group> <group> <C/> </group> <group> <D> <E/> <E> <F/> </E> </D> <D> <E/> <E> <F/> </E> </D> </group> <group> <B> <C/> <D/> </B> <B> <C/> <D/> </B> </group> Cheers, Dimitre Novatchev On Sun, May 12, 2013 at 9:42 PM, Dimitre Novatchev <dnovatchev@xxxxxxxxx> wrote: > serialize() is an XPath 3.0 function: > > http://www.w3.org/TR/xpath-functions-30/#func-serialize > > On Sun, May 12, 2013 at 9:08 PM, Ihe Onwuka <ihe.onwuka@xxxxxxxxx> wrote: >> It has since occurred that the client will probably live with >> discrepancy of the initial version. Nonetheless I am trying to look up >> serialize. It's not an XPath 2 function is it? >> >> On Mon, May 13, 2013 at 4:56 AM, Dimitre Novatchev <dnovatchev@xxxxxxxxx> wrote: >>> Yes, this should work: >>> >>> group-adjacent="*/serialize(.)" >>> >>> On Sun, May 12, 2013 at 8:48 PM, Dimitre Novatchev <dnovatchev@xxxxxxxxx> wrote: >>>> It seems to me that something like this might be useful: >>>> >>>> group-adjacent="my:deepEqualAdjacent(*)" >>>> >>>> >>>> of course this only conveys the idea -- it is obvious that this isn't precise. >>>> >>>> >>>> On Sun, May 12, 2013 at 8:08 PM, G. Ken Holman >>>> <gkholman@xxxxxxxxxxxxxxxxxxxx> wrote: >>>>> At 2013-05-12 20:00 -0700, Dimitre Novatchev wrote: >>>>>> >>>>>> select="*" group-adjacent="string-join(descendent::*/local-name(),' >>>>>> ')" >>>>>> >>>>>> this treats the following two fragments as belonging to the same >>>>>> group, and I believe Ihe doesn't want this: >>>>>> >>>>>> <B> >>>>>> <C/> >>>>>> <D/> >>>>>> </B> >>>>>> >>>>>> and >>>>>> >>>>>> <B> >>>>>> <C> >>>>>> <D> >>>>>> </C> >>>>>> </B> >>>>> >>>>> >>>>> Well spotted, Dmitre. >>>>> >>>>> How about something like the following to make the distinction, using a >>>>> simple non-name character to attach the depth to the name? >>>>> >>>>> group-adjacent="string-join(descendent::*/ >>>>> concat(local-name(),'$',count(ancestor::*)))" >>>>> >>>>> (untested) >>>>> >>>>> >>>>> . . . . . . . . Ken >> > > > > -- > Cheers, > Dimitre Novatchev > --------------------------------------- > Truly great madness cannot be achieved without significant intelligence. > --------------------------------------- > To invent, you need a good imagination and a pile of junk > ------------------------------------- > Never fight an inanimate object > ------------------------------------- > To avoid situations in which you might make mistakes may be the > biggest mistake of all > ------------------------------------ > Quality means doing it right when no one is looking. > ------------------------------------- > You've achieved success in your field when you don't know whether what > you're doing is work or play > ------------------------------------- > Facts do not cease to exist because they are ignored. > ------------------------------------- > Typing monkeys will write all Shakespeare's works in 200yrs.Will they > write all patents, too? :) > ------------------------------------- > I finally figured out the only reason to be alive is to enjoy it. -- Cheers, Dimitre Novatchev --------------------------------------- Truly great madness cannot be achieved without significant intelligence. --------------------------------------- To invent, you need a good imagination and a pile of junk ------------------------------------- Never fight an inanimate object ------------------------------------- To avoid situations in which you might make mistakes may be the biggest mistake of all ------------------------------------ Quality means doing it right when no one is looking. ------------------------------------- You've achieved success in your field when you don't know whether what you're doing is work or play ------------------------------------- Facts do not cease to exist because they are ignored. ------------------------------------- Typing monkeys will write all Shakespeare's works in 200yrs.Will they write all patents, too? :) ------------------------------------- I finally figured out the only reason to be alive is to enjoy it.
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|