Subject: Re: 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.
|