Subject: Re: [xsl] Need help with function to split string and return concatenated string From: Syd Bauman <Syd_Bauman@xxxxxxxxx> Date: Thu, 6 May 2010 19:01:20 -0400 |
The following is sort of a brute-force approach. I bet others on this list could do a nicer job. And of course, no error checking, so leading space, etc., just kills it. <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs" xmlns:xmp="http://www.example.org/ns/17" version="2.0"> <xsl:function name="xmp:coord" as="xs:string"> <xsl:param name="value" as="xs:string"/> <xsl:analyze-string select="$value" regex="^([0-9]+)\.([0-9]+)\.([0-9]+) ([NSEW])$"> <xsl:matching-substring> <xsl:value-of select="concat( regex-group(1), '° ', regex-group(2), '′ ', regex-group(3), '″ ', regex-group(4) )" /> </xsl:matching-substring> <xsl:non-matching-substring> <xsl:text>ERROR</xsl:text> </xsl:non-matching-substring> </xsl:analyze-string> </xsl:function> <xsl:template match="/"> <Wrapper> <xsl:apply-templates select="//location"/> </Wrapper> </xsl:template> <xsl:template match="location"> <Data> <xsl:value-of select="xmp:coord(@latitude)"/> </Data> <Data> <xsl:value-of select="xmp:coord(@longitude)"/> </Data> </xsl:template> </xsl:stylesheet> > I'm still knocking the rust off my brain and I've go to the point > where I wish to split the value of an attribute and concatenate the > pieces to return a second string. > > I have attributes in my input document which represent latitude and > longitude. They are presented this way: > > 34.56.12 N > > Where the digits to the left of the first period represent degrees, > the digits between the two periods represent minutes, and the > digits between the second period and the space represent seconds. > > The output I'm looking for given the input above is > > 34deg 56min 12sec N > > While I used to be a wiz with regular expression when I regularly > programmed in perl, I have lost it. I would appreciate some > guidance. > > My idea is to create a function that would perform this string > manipulation so that I could use something like this in my > stylesheet: > > <Data><xsl:value-of select="coord(@latitude)"/></Data> > <Data><xsl:value-of select="coord(@longitude)"/></Data> > > My input would look like: > > <location latitude="34.56.12 N" longitude="125.6.15 E"/> > > Thanks.
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] Need help with function to sp, cknell | Thread | Re: [xsl] Need help with function t, David Carlisle |
[xsl] Need help with function to sp, cknell | Date | [xsl] Is xsl:for-each "syntactic su, Costello, Roger L. |
Month |