|
[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
|

Cart








