|
Subject: Re: [xsl] Sorting network addresses From: Craig W <codecraig@xxxxxxxxx> Date: Wed, 2 Mar 2005 08:25:46 -0500 |
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
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [xsl] Sorting network addresses, David Carlisle | Thread | Re: [xsl] Sorting network addresses, David Carlisle |
| Re: [xsl] not a well-formed output , RQamar | Date | Re: [xsl] Sorting network addresses, David Carlisle |
| Month |