Subject: Re: [xsl] decoding hex string to ascii or UTF-8 From: "Dimitre Novatchev" <dnovatchev@xxxxxxxxx> Date: Tue, 1 Jul 2008 08:15:57 -0700 |
One possible way: <xsl:function name="f:hex-to-string" as="xs:string" > <xsl:param name="pHex" as="xs:string"/> <xsl:variable name="vHexDigits" as="xs:string" select="'0123456789ABCDEF'"/> <xsl:variable name="vHex" select="upper-case($pHex)"/> <xsl:sequence select= "if(string-length($pHex) mod 2 ne 0 or string-length(translate($vHex,$vHexDigits,'')) ne 0 ) then error() else codepoints-to-string( (for $i in (1 to string-length($vHex))[. mod 2 = 1], $d1 in substring($vHex,$i,1), $d2 in substring($vHex,$i+1,1) return 16* string-length(substring-before($vHexDigits, $d1)) + string-length(substring-before($vHexDigits, $d2)) ) ) " /> </xsl:function> When we test this function in the following transformation: <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:f="http://fxsl.sf.net/" exclude-result-prefixes="f xs" > <xsl:output method="text"/> <xsl:template match="/"> <xsl:value-of select="string-to-codepoints('Hello, World!')"/> ================= <xsl:value-of select= "codepoints-to-string((72,101,108,108,111,44,32,87,111,114,108,100,33))"/> ================= <xsl:value-of select="f:hex-to-string('48656c6c6f2c20576f726c6421')"/> </xsl:template> <xsl:function name="f:hex-to-string" as="xs:string" > <xsl:param name="pHex" as="xs:string"/> <xsl:variable name="vHexDigits" as="xs:string" select="'0123456789ABCDEF'"/> <xsl:variable name="vHex" select="upper-case($pHex)"/> <xsl:sequence select= "if(string-length($pHex) mod 2 ne 0 or string-length(translate($vHex,$vHexDigits,'')) ne 0 ) then error() else codepoints-to-string( (for $i in (1 to string-length($vHex))[. mod 2 = 1], $d1 in substring($vHex,$i,1), $d2 in substring($vHex,$i+1,1) return 16* string-length(substring-before($vHexDigits, $d1)) + string-length(substring-before($vHexDigits, $d2)) ) ) " /> </xsl:function> </xsl:stylesheet> the wanted result is produced: 72 101 108 108 111 44 32 87 111 114 108 100 33 ================= Hello, World! ================= Hello, World! -- Cheers, Dimitre Novatchev --------------------------------------- Truly great madness cannot be achieved without significant intelligence. --------------------------------------- To invent, you need a good imagination and a pile of junk ------------------------------------- Never fight an inanimate object ------------------------------------- You've achieved success in your field when you don't know whether what you're doing is work or play On Tue, Jul 1, 2008 at 6:42 AM, Steven Hentschel <steven.hentschel@xxxxxxxxxxx> wrote: > > I'm currently trying to work out the best way to convert a string of hex into the characters represented by each hex byte. I'm using xslt 2.0. So far I've come up with a function that simply does a lookup to from the hex value to the ascii character that hex value represents (see below). Can anyone suggest a better way? Is there a way (without using a huge lookup to achieve a similar sort of thing for UTF-8 chars? > > > > > > > > > > > > > > > > > > > > > ! > " > # > $ > % > & > ' > ( > ) > * > + > , > - > . > / > 0 > 1 > etc. > > > Regards > > Steven Hentschel > _________________________________________________________________ > > http://clk.atdmt.com/UKM/go/msnnkmgl0010000002ukm/direct/01/
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] decoding hex string to as, G. Ken Holman | Thread | Re: [xsl] decoding hex string to as, Steven Hentschel |
Re: [xsl] decoding hex string to as, G. Ken Holman | Date | Re: [xsl] Cocoon, Wendell Piez |
Month |