[xsl] Fwd: Grouping siblings

Subject: [xsl] Fwd: Grouping siblings
From: "nick public nickpubl@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Thu, 13 Apr 2023 12:43:56 -0000
Hi guys.
I have a problem transforming this structure into one another in which a
tag <rset> contains all the tags and own children
HEADER, ORDER, PARCEL, PARLINE until the next HEADER tag:





*<rset>  <HEADER>...</HEADER> // 1:1  <ORDER>...</ORDER> // 1:n
<PARCEL>...</PARCEL> // 1:n  <PARLINE>...</PARLINE> // 1:n</rset>*

The source structure can be, for example, like this
































*<rset>  <HEADER>...</HEADER>  <ORDER>...</ORDER>   <PARCEL>...</PARCEL>
<PARLINE>...</PARLINE></rset><rset>  <ORDER>...</ORDER>
<PARCEL>...</PARCEL>  <PARLINE>...</PARLINE></rset><rset>
<PARCEL>...</PARCEL>  <PARLINE>...</PARLINE></rset><rset>
<HEADER>...</HEADER>  <ORDER>...</ORDER>  <PARCEL>...</PARCEL>
<PARLINE>...</PARLINE></rset><rset>  <ORDER>...</ORDER>
<PARCEL>...</PARCEL>  <PARLINE>...</PARLINE>  <PARLINE>...</PARLINE>
<PARCEL>...</PARCEL>  <PARLINE>...</PARLINE></rset><rset>
<PARCEL>...</PARCEL>  <PARLINE>...</PARLINE></rset>*

I tried to remove all the <rset> tags with this







*<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform
<http://www.w3.org/1999/XSL/Transform>"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
exclude-result-prefixes="msxsl"    xmlns:ns1="urn:my.com:MM:COMET:ASN_LX"
  xmlns:ns0="urn:my.com:MM:COMET:ASN_LX">  <xsl:output method="xml"
indent="yes"/>*








*  <xsl:template match="*">    <ns1:MT_ASN_LX_JM >
<xsl:apply-templates select="rset"/>    </ns1:MT_ASN_LX_JM>
</xsl:template>  <xsl:template match="rset">    <xsl:copy-of select="*"/>
</xsl:template></xsl:stylesheet>*

to obtain this






















* <HEADER>...</HEADER>  <ORDER>...</ORDER>   <PARCEL>...</PARCEL>
<PARLINE>...</PARLINE>  <ORDER>...</ORDER>  <PARCEL>...</PARCEL>
<PARLINE>...</PARLINE>  <PARCEL>...</PARCEL>  <PARLINE>...</PARLINE>
<HEADER>...</HEADER>  <ORDER>...</ORDER>  <PARCEL>...</PARCEL>
<PARLINE>...</PARLINE>  <ORDER>...</ORDER>  <PARCEL>...</PARCEL>
<PARLINE>...</PARLINE>  <PARLINE>...</PARLINE>  <PARCEL>...</PARCEL>
<PARLINE>...</PARLINE>  <PARCEL>...</PARCEL>  <PARLINE>...</PARLINE>*
At this point, I have a problem grouping the HEADER tags and siblings in a
<rset> tag until the next HEADER one.
I don't know how to use the following-sibling / preceding-sibling
statements because all tags are siblings.
Is it possible to solve this in *XSLT 1.0*?

An example source XML is this















































































*<?xml version="1.0" encoding="UTF-8" standalone="no"?><ns0:MT_ASN_LX_File
xmlns:ns0="urn:my.com:MM:COMET:ASN_LX"><rset><HEADER><RTYPE>9020</RTYPE></HEA
DER><ORDER><RTYPE>9021</RTYPE></ORDER><PARCEL><RTYPE>9022</RTYPE></PARCEL><PA
RLINE><RTYPE>9023</RTYPE></PARLINE></rset><rset><ORDER><RTYPE>9021</RTYPE></O
RDER><PARCEL><RTYPE>9022</RTYPE></PARCEL><PARLINE><RTYPE>9023</RTYPE></PARLIN
E><PARLINE><RTYPE>9023</RTYPE></PARLINE></rset><rset><HEADER><RTYPE>9020</RTY
PE></HEADER><ORDER><RTYPE>9021</RTYPE></ORDER><PARCEL><RTYPE>9022</RTYPE></PA
RCEL><PARLINE><RTYPE>9023</RTYPE></PARLINE></rset><rset><PARCEL><RTYPE>9022</
RTYPE></PARCEL><PARLINE><RTYPE>9023</RTYPE></PARLINE></rset><rset><ORDER><RTY
PE>9021</RTYPE></ORDER><PARCEL><RTYPE>9022</RTYPE></PARCEL></rset><rset><ORDE
R><RTYPE>9021</RTYPE></ORDER><PARCEL><RTYPE>9022</RTYPE></PARCEL><PARLINE><RT
YPE>9023</RTYPE></PARLINE></rset><rset><PARCEL><RTYPE>9022</RTYPE></PARCEL><P
ARLINE><RTYPE>9023</RTYPE></PARLINE></rset></ns0:MT_ASN_LX_File>*

Thank you very much for your support.
Nicola

Current Thread