[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: Problem selecting distinct values in XSLT1.0

Subject: Re: Problem selecting distinct values in XSLT1.0
From: "Pankaj Bishnoi" <pankaj.bishnoi@xxxxxxxxxxx>
Date: Thu, 9 Feb 2006 12:54:50 +0530
pdo problem
Hi All
          This issue hasb been solved using keys. Here i have cretaed a key
that will be concating ProgramRID and ProgramPWID fields. In my case
ProgramPWID was having duplicate values and i needed to find distinct values
for every TPL_Program record.


<?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:param name="_Input1"/>
    <xsl:variable name="Input1" select="document($_Input1)"/>
    <xsl:variable name="apos">'</xsl:variable>
 <xsl:key name="ProcessKey" match="ProcessPWID"
use="concat(../ProgramRID,.)"/>

  <xsl:template match="/">

        <pwpdp:AddProgram>


                <xsl:for-each select="$Input1/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[generate-id()=generate-id(key('ProcessKey',concat(..
/ProgramRID,.)))]">
               <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>



----- Original Message ----- 
From: "Pankaj Bishnoi" <pankaj.bishnoi@xxxxxxxxxxx>
To: <xsl-list@xxxxxxxxxxxxxxxxxxxxxx>
Sent: Wednesday, February 08, 2006 9:03 PM
Subject:  Problem selecting distinct values in XSLT1.0


> 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

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Cast Your Vote

We need your help – Vote for DataDirect XML Products!

  • Best SOA or XML site

Winners and finalists announced at SOA World Conference in November.

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2007 All Rights Reserved.