Easy with 2.0:
<xsl:for-each-group select="*" group-starting-with="a">
<devices>
<xsl:copy-of select="current-group()"/>
</devices>
</xsl:for-each-group>
Michael Kay
http://www.saxonica.com/
-----Original Message-----
From: Khorasani, Houman
[mailto:Houman(_dot_)Khorasani(_at_)comverse(_dot_)com]
Sent: 20 July 2006 11:30
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] Dirty Input
Hello,
Our system is generating some very dirty XML input. I am not
sure if there would be any solution to this problem at all.
At first it might remind you of my similar request from last
week. But this time the elements are not that conveniently
grouped into one parent tag but are rather loose.
The tag <Devices> contains elements <a>, <b> and <c> in that
order respectively. The elements <b> and <c> incl. their sub
elements are optional and may be not in the input file. But
<a> is mandatory and would always be in the input file.
The output shall give the exact structure as the input file
but group <a>, <b> and <c> together and put a <device> tag
between each group.
Since <a> is mandatory we could take it as a base and say the
first <a> is in the first group and the following tags until
the next <a> belong to group 1 as well. The next <a> belongs
to group 2 and any following tags until the next <a> shall be
in group 2 as well, etc. Each group shall be separated by a
<device> tag. Otherwise the same structure of the input file
shall be copied.
Input file:
<bla>x</bla>
<bla>x</bla>
<Devices>
<a>
<a2>1</a2>
</a>
<b>
<b2>
<b3>1</b3>
<b4>1</b4>
</b2>
<b2i>
<b3i>1</b3i>
<b4i>1</b4i>
</b2i>
...
</b>
<c>1</c>
<a>
<a2>1</a2>
</a>
<b>
<b2>
<b3>1</b3>
<b4>1</b4>
</b2>
<b2i>
<b3i>1</b3i>
<b4i>1</b4i>
</b2i>
...
</b>
<c>1</c>
...
</Devices>
Output:
<bla>x</bla>
<bla>x</bla>
<Devices>
<device>
<a>
<a2>1</a2>
</a>
<b>
<b2>
<b3>1</b3>
<b4>1</b4>
</b2>
<b2i>
<b3i>1</b3i>
<b4i>1</b4i>
</b2i>
...
</b>
<c>1</c>
</device>
<device>
<a>
<a2>1</a2>
</a>
<b>
<b2>
<b3>1</b3>
<b4>1</b4>
</b2>
<b2i>
<b3i>1</b3i>
<b4i>1</b4i>
</b2i>
...
</b>
<c>1</c>
</device>
...
</Devices>
Do you guys think this would be possible at all?
Many Thanks,
Houman
--~------------------------------------------------------------------
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>
--~--