[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: Stuck with select distinct
Hi, Mark,
You can use multiple predicates, thus: colours/colour[. != 'Red' and . != 'Blue'][. != 'FFFFFF'][not(. = preceding-sibling::colour)] or a single joined predicate, thus: colours/colour[. != 'Red' and . != 'Blue' and . != 'FFFFFF' and not(. = preceding-sibling::colour)] I threw together the following transform to demonstrate: <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" indent="yes"/> <xsl:template match="/"> <colours> <xsl:apply-templates/> </colours> </xsl:template> <xsl:template match="pages/page"> <xsl:copy-of select="colours/colour[. != 'Red' and . != 'Blue' and . != 'FFFFFF' and not(. = preceding-sibling::colour)]"/> </xsl:template> </xsl:transform> and tested it with Saxon 6. It produced the following: <?xml version="1.0" encoding="utf-8"?> <colours> <colour>Green</colour> <colour>Green</colour> <colour>Green</colour> </colours> when run against your example (after I added an outside wrapper element to make it well-formed XML). HTH Jay Bryant ----- Original Message ----- From: "Mark Anderson" <mark.anderson@xxxxxxxxxxxxxxxxxxx> To: <xsl-list@xxxxxxxxxxxxxxxxxxxxxx> Sent: Saturday, November 08, 2008 10:36 AM Subject: Stuck with select distinct Hi All I'm trying to get a list of distinct items from an XML. I've done this many times using a predicate containing a preceding axis, but this one has got me stumped: <page> <front_back>F</front_back> <page_no>1</page_no> <colours> <colour>Red</colour> <rgb>00FFFF</rgb> <colour>Green</colour> <rgb>00FF00</rgb> <colour>Blue</colour> <rgb>FFFF00</rgb> </colours> </page> <page> <front_back>F</front_back> <page_no>2</page_no> <colours> <colour>Green</colour> <rgb>FFFFFF</rgb> </colours> </page> <page> <front_back>F</front_back> <page_no>3</page_no> <colours> <colour>Green</colour> <rgb>00FF00</rgb> </colours> </page> I need to return a nodeset with a list of DISTINCT colour nodes, that I can then process in a for-each element. The other conditions for selection are: colour is not Red or Blue rgb value is not FFFFFF I somehow need to combine the following predicates (I think) colours/colour[. != 'Red' and . != 'Blue'] colours/rgb[. != 'FFFFFF'] colours/colour[not(. = preceding-sibling::colour)] I'm stuck with XSL 1.0 and would like to avoid using keys if possible Any suggestions greatly appreciated Regards Mark
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|