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 |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] XSLT result tree fragment, Martin Honnen martin | Thread | Re: [xsl] Fwd: Grouping siblings, Martin Honnen martin |
Re: [xsl] XSLT result tree fragment, Michael Kay michaelk | Date | Re: [xsl] Fwd: Grouping siblings, Martin Honnen martin |
Month |