Hi All
I am having a scenario with XSLT1.0 where there are multiple
occurances of a field ProcessPWID. But this field will conatin only two
values say Pankaj and Bishnoi. These two values can be anything. My source
XML is::
<?xml version="1.0" encoding="UTF-8"?>
<DB>
<dbo.TPL_Program Action="242" RollBackOnError="243">
<RID>RID163</RID>
<PWID>PWID164</PWID>
<PDOPWID>PDOPWID165</PDOPWID>
<CustomerKey>CustomerKey166</CustomerKey>
<Name>Name167</Name>
<Description>Description168</Description>
<ProgramStatus>ProgramStatus169</ProgramStatus>
<VerbType>VerbType170</VerbType>
<Status>Status171</Status>
<dbo.TPL_Program_PPM Action="207" RollBackOnError="208">
<RID>RID195</RID>
<ProgramRID>ProgramRID196</ProgramRID>
<ProgramPWID>ProgramPWID197</ProgramPWID>
<ProcessPWID>Pankaj</ProcessPWID>
<PPMPWID>PPMPWID199</PPMPWID>
<GateNumber>GateNumber100</GateNumber>
</dbo.TPL_Program_PPM>
<dbo.TPL_Program_PPM Action="221" RollBackOnError="222">
<RID>RID209</RID>
<ProgramRID>ProgramRID210</ProgramRID>
<ProgramPWID>ProgramPWID211</ProgramPWID>
<ProcessPWID>Bishnoi</ProcessPWID>
<PPMPWID>PPMPWID213</PPMPWID>
<GateNumber>GateNumber200</GateNumber>
</dbo.TPL_Program_PPM>
<dbo.TPL_Program_PPM Action="207" RollBackOnError="208">
<RID>RID195</RID>
<ProgramRID>ProgramRID204</ProgramRID>
<ProgramPWID>ProgramPWID205</ProgramPWID>
<ProcessPWID>Pankaj</ProcessPWID>
<PPMPWID>PPMPWID199</PPMPWID>
<GateNumber>GateNumber300</GateNumber>
</dbo.TPL_Program_PPM>
<dbo.TPL_Program_PPM Action="207" RollBackOnError="208">
<RID>RID195</RID>
<ProgramRID>ProgramRID304</ProgramRID>
<ProgramPWID>ProgramPWID305</ProgramPWID>
<ProcessPWID>Pankaj</ProcessPWID>
<PPMPWID>PPMPWID199</PPMPWID>
<GateNumber>GateNumber400</GateNumber>
</dbo.TPL_Program_PPM>
</dbo.TPL_Program>
<dbo.TPL_Program Action="323" RollBackOnError="324">
<RID>RID244</RID>
<PWID>PWID245</PWID>
<PDOPWID>PDOPWID246</PDOPWID>
<CustomerKey>CustomerKey247</CustomerKey>
<Name>Name248</Name>
<Description>Description249</Description>
<ProgramStatus>ProgramStatus250</ProgramStatus>
<VerbType>VerbType251</VerbType>
<Status>Status252</Status>
<dbo.TPL_Program_PPM Action="207" RollBackOnError="208">
<RID>RID195</RID>
<ProgramRID>ProgramRID196</ProgramRID>
<ProgramPWID>ProgramPWID197</ProgramPWID>
<ProcessPWID>Pankaj</ProcessPWID>
<PPMPWID>PPMPWID199</PPMPWID>
<GateNumber>GateNumber300</GateNumber>
</dbo.TPL_Program_PPM>
<dbo.TPL_Program_PPM Action="221" RollBackOnError="222">
<RID>RID209</RID>
<ProgramRID>ProgramRID210</ProgramRID>
<ProgramPWID>ProgramPWID211</ProgramPWID>
<ProcessPWID>Bishnoi</ProcessPWID>
<PPMPWID>PPMPWID213</PPMPWID>
<GateNumber>GateNumber200</GateNumber>
</dbo.TPL_Program_PPM>
<dbo.TPL_Program_PPM Action="207" RollBackOnError="208">
<RID>RID195</RID>
<ProgramRID>ProgramRID204</ProgramRID>
<ProgramPWID>ProgramPWID205</ProgramPWID>
<ProcessPWID>Pankaj</ProcessPWID>
<PPMPWID>PPMPWID199</PPMPWID>
<GateNumber>GateNumber200</GateNumber>
</dbo.TPL_Program_PPM>
<dbo.TPL_Program_PPM Action="207" RollBackOnError="208">
<RID>RID195</RID>
<ProgramRID>ProgramRID304</ProgramRID>
<ProgramPWID>ProgramPWID305</ProgramPWID>
<ProcessPWID>Pankaj</ProcessPWID>
<PPMPWID>PPMPWID199</PPMPWID>
<GateNumber>GateNumber300</GateNumber>
</dbo.TPL_Program_PPM>
</dbo.TPL_Program>
</DB>
and my xsl is :::::::::::::::
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet extension-element-prefixes="redirect" version="1.1"
xmlns:java="http://xml.apache.org/xslt/java"
xmlns:oa="http://www.openapplications.org/oagis"
xmlns:pwpdp="http://www.powerway.com/pwpdp"
xmlns:redirect="org.apache.xalan.xslt.extensions.Redirect"
xmlns:str="http://exslt.org/strings"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output encoding="UTF-8" indent="yes" method="xml" version="1.0"/>
<xsl:param name="_userName"/>
<xsl:param name="_password"/>
<xsl:param name="_class"/>
<xsl:param name="_identifier"/>
<xsl:param name="_subject"/>
<xsl:param name="_repositoryPath"/>
<xsl:template match="/">
<pwpdp:AddProgram>
<xsl:for-each select="/DB/dbo.TPL_Program">
<pwpdp:Program>
<xsl:variable name="varProcessPPM"
select="dbo.TPL_Program_PPM"/>
<xsl:variable name="varProcessPWID"
select="dbo.TPL_Program_PPM/ProcessPWID"/>
<pwpdp:PwHeader>
<oa:DocumentId>
<oa:Id>
<xsl:value-of select="RID"/>
</oa:Id>
<oa:Revision/>
</oa:DocumentId>
</pwpdp:PwHeader>
<xsl:if test="'' !=''">
<pwpdp:ProgramID>
<xsl:value-of select="''"/>
</pwpdp:ProgramID>
</xsl:if>
<pwpdp:ProgramName>
<xsl:value-of select="Name"/>
</pwpdp:ProgramName>
<xsl:if test="Description !=''">
<pwpdp:Description>
<xsl:value-of select="Description"/>
</pwpdp:Description>
</xsl:if>
<xsl:if test="ProgramStatus !=''">
<pwpdp:Status>
<xsl:value-of select="ProgramStatus"/>
</pwpdp:Status>
</xsl:if>
<pwpdp:PDO>
<pwpdp:PWID>
<xsl:value-of select="PDOPWID"/>
</pwpdp:PWID>
<pwpdp:TextName>
<xsl:value-of select="dbo.ST_PDO/Name"/>
</pwpdp:TextName>
</pwpdp:PDO>
<xsl:for-each
select="$varProcessPWID[not(.=preceding::ProcessPWID)]">
<pwpdp:Process>
<xsl:variable name="pwid" select="."/>
<xsl:if test=". != ''">
<pwpdp:PWID>
<xsl:value-of select="$pwid"/>
</pwpdp:PWID>
</xsl:if>
<xsl:if test="'' != ''">
<pwpdp:TextName>
<xsl:value-of select="''"/>
</pwpdp:TextName>
</xsl:if>
<xsl:for-each select="$varProcessPPM">
<xsl:if test="GateNumber != '' and $pwid
= ProcessPWID">
<pwpdp:PPM>
<xsl:if test="'' != ''">
<pwpdp:PWID>
<xsl:value-of
select="''"/>
</pwpdp:PWID>
</xsl:if>
<xsl:if test="'' != ''">
<pwpdp:TextName>
<xsl:value-of
select="''"/>
</pwpdp:TextName>
</xsl:if>
<pwpdp:GateNumber>
<xsl:value-of
select="GateNumber"/>
</pwpdp:GateNumber>
</pwpdp:PPM>
</xsl:if>
</xsl:for-each>
</pwpdp:Process>
</xsl:for-each>
</pwpdp:Program>
</xsl:for-each>
</pwpdp:AddProgram>
</xsl:template>
</xsl:stylesheet>
here i use Preceeding for selecting distinct values but this creates
problems for second record as it applies for complete src xml file. The
output generated is:::::::::::
<?xml version="1.0" encoding="UTF-8"?>
<pwpdp:AddProgram xmlns:java="http://xml.apache.org/xslt/java"
xmlns:oa="http://www.openapplications.org/oagis"
xmlns:pwpdp="http://www.powerway.com/pwpdp"
xmlns:str="http://exslt.org/strings">
<pwpdp:Program>
<pwpdp:PwHeader>
<oa:DocumentId>
<oa:Id>RID163</oa:Id>
<oa:Revision/>
</oa:DocumentId>
</pwpdp:PwHeader>
<pwpdp:ProgramName>Name167</pwpdp:ProgramName>
<pwpdp:Description>Description168</pwpdp:Description>
<pwpdp:Status>ProgramStatus169</pwpdp:Status>
<pwpdp:PDO>
<pwpdp:PWID>PDOPWID165</pwpdp:PWID>
<pwpdp:TextName/>
</pwpdp:PDO>
<pwpdp:Process>
<pwpdp:PWID>Pankaj</pwpdp:PWID>
<pwpdp:PPM>
<pwpdp:GateNumber>GateNumber100</pwpdp:GateNumber>
</pwpdp:PPM>
<pwpdp:PPM>
<pwpdp:GateNumber>GateNumber300</pwpdp:GateNumber>
</pwpdp:PPM>
<pwpdp:PPM>
<pwpdp:GateNumber>GateNumber400</pwpdp:GateNumber>
</pwpdp:PPM>
</pwpdp:Process>
<pwpdp:Process>
<pwpdp:PWID>Bishnoi</pwpdp:PWID>
<pwpdp:PPM>
<pwpdp:GateNumber>GateNumber200</pwpdp:GateNumber>
</pwpdp:PPM>
</pwpdp:Process>
</pwpdp:Program>
<pwpdp:Program>
<pwpdp:PwHeader>
<oa:DocumentId>
<oa:Id>RID244</oa:Id>
<oa:Revision/>
</oa:DocumentId>
</pwpdp:PwHeader>
<pwpdp:ProgramName>Name248</pwpdp:ProgramName>
<pwpdp:Description>Description249</pwpdp:Description>
<pwpdp:Status>ProgramStatus250</pwpdp:Status>
<pwpdp:PDO>
<pwpdp:PWID>PDOPWID246</pwpdp:PWID>
<pwpdp:TextName/>
</pwpdp:PDO>
</pwpdp:Program>
</pwpdp:AddProgram>
here in second Program record i have no process element because of
<xsl:for-each select="$varProcessPWID[not(.=preceding::ProcessPWID)]">
is there any other way??
I cannot use XSLT2.0
Thanks
Pankaj
--~------------------------------------------------------------------
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>
--~--