Re: [xsl] Issue with repetition of elements in the input XML

Subject: Re: [xsl] Issue with repetition of elements in the input XML
From: lakshmi mrudula <mrudula_lakshmi@xxxxxxxxx>
Date: Wed, 28 Nov 2007 02:41:54 +1300 (NZDT)
Hi,

With one more if condition to below approach its
working fine.

THanks for your solution.

Here is the XSL.

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
version="2.0">

	<xsl:output method="xml" indent="yes"/>

	<xsl:variable name="controlInfo">
		<CompanyId/>
		<ReservationControlNumber/>
		<ReservationControlType/>
		<FirstDate/>
		<Time/>
	</xsl:variable>

	<xsl:template match="/root">
		<root>
			<RCI>
				<xsl:for-each-group
select="ReservationControlInformationSegment/*"
group-starting-with="CompanyId">

					<xsl:variable
name="aReservationControlInformation">RCI<xsl:number
value="position()" format="01"/></xsl:variable>
					<xsl:element
name="{$aReservationControlInformation}">
						<xsl:for-each select="$controlInfo/*">
							<xsl:variable
name="aReservationControlInformationNew">
								<xsl:value-of
select="$aReservationControlInformation"/>
								<xsl:number value="position()" format="01"/>
							</xsl:variable>
							<xsl:if test="current-group()[local-name() =
local-name(current())]">
							<xsl:element
name="{$aReservationControlInformationNew}">
								<xsl:value-of
select="current-group()[local-name() =
local-name(current())]"/>
							</xsl:element>
							</xsl:if>
						</xsl:for-each>
					</xsl:element>
				</xsl:for-each-group>
			</RCI>
		</root>
	</xsl:template>
</xsl:stylesheet>


When we tried this XSL with StylusStudio its able to
convert the input XML. But with eclipse its not
working. This is because we are using XSLT 1.0 and
for-each-group is not defined for that. Can you please
provide us the solution in XSLT 1.0. What will be the
equivalent of for-each-group.

--- Mukul Gandhi <gandhi.mukul@xxxxxxxxx> wrote:

> Please try this:
> 
> <?xml version="1.0" encoding="UTF-8"?>
> <xsl:stylesheet
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
>                         version="2.0">
> 
>  <xsl:output method="xml" indent="yes" />
> 
>  <xsl:variable name="controlInfo">
>    <CompanyId/>
>    <ReservationControlNumber/>
>    <ReservationControlType/>
>    <FirstDate/>
>    <Time/>
>  </xsl:variable>
> 
>  <xsl:template match="/root">
>    <root>
>      <RCI>
>        <xsl:for-each-group
> select="ReservationControlInformationSegment/*"
> group-starting-with="CompanyId">
> 
>          <xsl:variable
> name="aReservationControlInformation">RCI<xsl:number
>                        value="position()"
> format="01"/>
>          </xsl:variable>
>          <xsl:element
> name="{$aReservationControlInformation}">
>            <xsl:for-each select="$controlInfo/*">
>               <xsl:variable
> name="aReservationControlInformationNew">
>                  <xsl:value-of
> select="$aReservationControlInformation"
> /><xsl:number
>                            value="position()"
> format="01"/>
>               </xsl:variable>
>               <xsl:element
> name="{$aReservationControlInformationNew}">
>                 <xsl:value-of
> select="current-group()[local-name() =
> local-name(current())]" />
>               </xsl:element>
>            </xsl:for-each>
>          </xsl:element>
>        </xsl:for-each-group>
>      </RCI>
>    </root>
>  </xsl:template>
> 
> </xsl:stylesheet>
> 
> On Nov 23, 2007 10:57 AM, lakshmi mrudula
> <mrudula_lakshmi@xxxxxxxxx> wrote:
> > Hi,
> >
> > Thanks for your solution.
> > But with XSL logic below,
> > If input XML is as shown below:
> >
> > <?xml version="1.0"?>
> > <root>
> >        <ReservationControlInformationSegment>
> >                <CompanyId>AAH</CompanyId>
> >
> >
>
<ReservationControlNumber>ABC12345</ReservationControlNumber>
> >               
> <ReservationControlType>A</ReservationControlType>
> >                <FirstDate>11OCT2007</FirstDate>
> >                <Time>1230</Time>
> >                <CompanyId>AAA</CompanyId>
> >
> >               
> <ReservationControlType>B</ReservationControlType>
> >                <FirstDate>11OCT2007</FirstDate>
> >                <Time>1130</Time>
> >        </ReservationControlInformationSegment>
> > </root>
> >
> > Then Expected output will be:
> >
> > <?xml version='1.0' ?>
> > <root>
> >  <RCI>
> >    <RCI01>
> >      <RCI0101>AAH</RCI0101>
> >      <RCI0102>ABC12345</RCI0102>
> >      <RCI0103>A</RCI0103>
> >      <RCI0104>11OCT2007</RCI0104>
> >      <RCI0105>1230</RCI0105>
> >    </RCI01>
> >    <RCI02>
> >      <RCI0201>AAA</RCI0201>
> >      <RCI0202/>
> >      <RCI0203>B</RCI0203>
> >      <RCI0204>11OCT2007</RCI0204>
> >      <RCI0205>1130</RCI0205>
> >    </RCI02>
> >  </RCI>
> > </root>
> >
> > But the actual output is coming with the given XSL
> as
> > below:
> >
> > <?xml version='1.0' ?>
> > <root>
> >  <RCI>
> >    <RCI01>
> >      <RCI0101>AAH</RCI0101>
> >      <RCI0102>ABC12345</RCI0102>
> >      <RCI0103>A</RCI0103>
> >      <RCI0104>11OCT2007</RCI0104>
> >      <RCI0105>1230</RCI0105>
> >    </RCI01>
> >    <RCI02>
> >      <RCI0201>AAA</RCI0201>
> >      <RCI0202>B</RCI0202>
> >      <RCI0203>11OCT2007</RCI0203>
> >      <RCI0204>1130</RCI0204>
> >    </RCI02>
> >  </RCI>
> > </root>
> >
> >
> > Our requirement for the output is:
> >
> >  If any information is missing in the middle then
> > empty
> >  tag should be there.
> >  But if it is missing at the end, then empty tags
> need
> >  not be there in the output.
> >
> >  In input XML, elements will be in the same order.
> > None
> >  of the elements are mandatory.
> >  Any of the elements can be missed in the input
> XML.
> >
> >  For this requirement we need solution.
> >
> >
> >
> >
> > --- Mukul Gandhi <gandhi.mukul@xxxxxxxxx> wrote:
> >
> > > This problem is easily solved with the XSLT 2.0
> > > grouping construct.
> > > Please refer to the solution below:
> > >
> > > <?xml version="1.0" encoding="UTF-8"?>
> > > <xsl:stylesheet
> > > xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
> > >                        version="2.0">
> > >
> > >   <xsl:output method="xml" indent="yes" />
> > >
> > >   <xsl:template match="/root">
> > >     <root>
> > >       <RCI>
> > >         <xsl:for-each-group
> > > select="ReservationControlInformationSegment/*"
> > > group-starting-with="CompanyId">
> > >           <xsl:variable
> > >
> name="aReservationControlInformation">RCI<xsl:number
> > >                         value="position()"
> > > format="01"/>
> > >           </xsl:variable>
> > >           <xsl:element
> > > name="{$aReservationControlInformation}">
> > >             <xsl:for-each
> select="current-group()">
> > >                <xsl:variable
> > > name="aReservationControlInformationNew">
> > >                   <xsl:value-of
> > > select="$aReservationControlInformation"
> > > /><xsl:number
> > >                               value="position()"
> > > format="01"/>
> > >                </xsl:variable>
> > >                <xsl:element
> > > name="{$aReservationControlInformationNew}">
> > >                  <xsl:value-of select="." />
> > >                </xsl:element>
> > >             </xsl:for-each>
> > >           </xsl:element>
> > >         </xsl:for-each-group>
> > >       </RCI>
> > >     </root>
> > >   </xsl:template>
> > >
> > > </xsl:stylesheet>
> > >
> > > On Nov 22, 2007 3:05 PM, lakshmi mrudula
> > > <mrudula_lakshmi@xxxxxxxxx> wrote:
> 
=== message truncated ===


Send instant messages to your online friends http://au.messenger.yahoo.com 

Current Thread