Subject: [xsl] Stuck on how to properly use 'preceding' axis From: Rusty Morton <rusty_morton@xxxxxxxxx> Date: Wed, 12 Jul 2006 13:34:28 -0700 (PDT) |
Hi All, I recently posted the same issue under a different subject but have had no responses. I believe I may not have expressed my problem correctly so here it goes: PROBLEM: Trying to return a distinct list of 'DistributorCode' values for each 'Item' node. My expression using the preceding axis is not removing my duplicates (most likely due to my noobness of understanding the language). -------MY SAMPLE XML:---------- <Items xmlns:loader="http://xxx/loader/1.0"; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; xsi:schemaLocation="http://xxx/ns/pioneer/1.0 http://xxx/xsd/pioneer.xsd";> - <Item ItemId="640308" createDate="2002-10-30T10:06:24Z" lastChangeDate="2006-03-29T12:27:13Z"> <CatalogNumber>123456</CatalogNumber> <CEMark>CE0086</CEMark> - <ItemsAsMade> - <ItemAsMade> <ManufacturerCode>SHC</ManufacturerCode> <SupplierCode>SHC</SupplierCode> <Currency>EUR</Currency> - <ItemsAsSold> - <ItemAsSold> <DistributorCode>SIG</DistributorCode> <CanOrderFlag>true</CanOrderFlag> <CanShipFlag>true</CanShipFlag> </ItemAsSold> - <ItemAsSold> <DistributorCode>ARG</DistributorCode> <CanOrderFlag>true</CanOrderFlag> <CanShipFlag>true</CanShipFlag> </ItemAsSold> - <ItemAsSold> <DistributorCode>FRA</DistributorCode> <CanOrderFlag>true</CanOrderFlag> <CanShipFlag>true</CanShipFlag> </ItemAsSold> </ItemsAsSold> </ItemAsMade> - <ItemAsMade> <ManufacturerCode>END</ManufacturerCode> <SupplierCode>END</SupplierCode> <Currency>US</Currency> - <ItemsAsSold> - <ItemAsSold> <DistributorCode>SIG</DistributorCode> <CanOrderFlag>true</CanOrderFlag> <CanShipFlag>true</CanShipFlag> </ItemAsSold> - <ItemAsSold> <DistributorCode>EME</DistributorCode> <CanOrderFlag>false</CanOrderFlag> <CanShipFlag>false</CanShipFlag> </ItemAsSold> - <ItemAsSold> <DistributorCode>FRA</DistributorCode> <CanOrderFlag>true</CanOrderFlag> <CanShipFlag>true</CanShipFlag> </ItemAsSold> </ItemsAsSold> </ItemAsMade> - <ItemAsMade> <ManufacturerCode>BIO</ManufacturerCode> <SupplierCode>BIO</SupplierCode> <Currency>US</Currency> - <ItemsAsSold> - <ItemAsSold> <DistributorCode>SIG</DistributorCode> <CanOrderFlag>true</CanOrderFlag> <CanShipFlag>true</CanShipFlag> </ItemAsSold> - <ItemAsSold> <DistributorCode>EME</DistributorCode> <CanOrderFlag>true</CanOrderFlag> <CanShipFlag>false</CanShipFlag> </ItemAsSold> - <ItemAsSold> <DistributorCode>FRA</DistributorCode> <CanOrderFlag>true</CanOrderFlag> <CanShipFlag>true</CanShipFlag> </ItemAsSold> </ItemsAsSold> </ItemAsMade> </ItemsAsMade> </Item> <Item Id = "xxxxx"> ....thousand more Items.. </Items> --------My v1.0 XSLT code:---------- <xsl:variable name="distributorVal"> <!-- only process distributorCodes if canShip andcanOrder are both true --> <xsl:for-each select="*/ItemAsMade"> <xsl:for-each select="*/ItemAsSold"> <xsl:if test="(CanOrderFlag = 'true') and (CanShipFlag = 'true')"> <xsl:if test="//ItemAsSold[not(DistributorCode = preceding::DistributorCode)]"> <xsl:value-of select="DistributorCode" /> <xsl:text>,</xsl:text> </xsl:if> </xsl:if> </xsl:for-each> </xsl:for-each> </xsl:variable> <xsl:call-template name="attrvalue_template"> <xsl:with-param name="stringValue"select="substring($distributorVal, 1,string-length($distributorVal)-1)" /> </xsl:call-template> ----Current Results Returned based on Code used above--- stringvalue="SIG,ARG,FRA,SIG,EME,FRA,SIG,EME,FRA" -------Result set I want to have----------- stringvalue="SIG,ARG,FRA,EME" I am hoping its simply an alteration of the tag: <xsl:if test="//ItemAsSold[not(DistributorCode = preceding::DistributorCode)]"> I have tried a number of different methods to no avail..PLEASE help!! Thanks, -Rusty
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] processing xml data with , Wendell Piez | Thread | Re: [xsl] Stuck on how to properly , Jay Bryant |
Re: [xsl] processing xml data with , Wendell Piez | Date | Re: [xsl] Stuck on how to properly , Jay Bryant |
Month |