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
|