[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: Sorting network addresses
ok my xml looks like this <networks> <network> <address>1.1.1.1</address> </network> <network> <address>170.5.2.4</address> </network> <network> <address>2.3.1.2</address> </network> </networks> my XSLT looks like <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="no"/> <xsl:strip-space elements="*" /> <xsl:variable name="newline"> <xsl:text> </xsl:text> </xsl:variable> <xsl:template match="/"> <xsl:value-of select="$newline" /> <networks> <xsl:value-of select="$newline" /> <xsl:for-each select="networks/network"> <xsl:sort data-type="number" select="substring-before(address,'.')"/> <xsl:sort data-type="number" select="substring-before(substring-after(address,'.'),'.')"/> <xsl:sort data-type="number" select="substring-before(substring-after(substring-after(address,'.'),'.'),'.')"/> <xsl:sort data-type="number" select="substring-after(substring-after(substring-after(address,'.'),'.'),'.')"/> <network> <xsl:value-of select="$newline" /> <srcaddr> <xsl:value-of select="address" /> </srcaddr> <xsl:value-of select="$newline" /> </network> <xsl:value-of select="$newline" /> </xsl:for-each> </networks> </xsl:template> </xsl:stylesheet> ...essentially i want to take the source XML sort it by the address element, and write out the result (as a sorted version of the source).. the result i am getting now is like this <?xml version="1.0" encoding="UTF-8"?> <networks> <network> <address>1.1.1.1</address> </network> <network> <address>1.1.1.1</address> </network> <network> <address>1.1.1.1</address> </network> <network> <address>1.1.1.1</address> </network> <network> <address>2.3.1.2</address> </network> <network> <address>170.5.2.4</address> </network> <network> <address>2.3.1.2</address> </network> <network> <address>2.3.1.2</address> </network> <network> <address>2.3.1.2</address> </network> <network> <address>170.5.2.4</address> </network> <network> <address>170.5.2.4</address> </network> <network> <address>170.5.2.4</address> </network> </networks> I should only have 3 networks not twelve....i am guessing something is wrong with my sort/for-each. thanks On Wed, 2 Mar 2005 13:05:35 GMT, David Carlisle <davidc@xxxxxxxxx> wrote: > > > Is there a way to extend the sort function provided by XSLT? > > the xslt spec allows you to use any name (in a namespace of your choice) > in addition to the two predefined names of number and text as sorting > datatypes. > > How you associate the name with the java that specifies the sorting, and > what java would be needed would be processor specific but I'd be > surprised if xalan doesn't offer a hook to this (saxon does) > > That said, you could do this just in xslt as > > <xsl:sort data-type="number" select="substring-before(address,'.')"/> > <xsl:sort data-type="number" select="substring-before(substring-after(address,'.'),'.')"/> > <xsl:sort data-type="number" select="substring-before(substring-after(substring-after(address,'.'),'.'),'.')"/> > <xsl:sort data-type="number" select="substring-after(substring-after(substring-after(address,'.'),'.'),'.')"/> > > (modulo typing errors:-) > > david > > ________________________________________________________________________ > This e-mail has been scanned for all viruses by Star. The > service is powered by MessageLabs. For more information on a proactive > anti-virus service working around the clock, around the globe, visit: > http://www.star.net.uk > ________________________________________________________________________ > > -- http://www.codecraig.com http://jroller.com/page/codecraig
|
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
|