xsl-list
[Top] [All Lists]

Re: [xsl] Need help with function to split string and return concatenated string

2010-05-06 22:47:05
You could use something like this:

   <?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet exclude-result-prefixes="#all" version="2.0" xmlns:f="funtions" xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
      <xsl:output method="xml" indent="yes"/>
<xsl:template match="node()|@*">
         <xsl:apply-templates select="node()|@*"/>
      </xsl:template>

      <xsl:function name="f:coord">
         <xsl:param name="input"/>
         <xsl:for-each select="tokenize(data($input),'[. ]')">
            <xsl:choose>
               <xsl:when test="position()=1">
                  <xsl:value-of select="."/>
                  <xsl:text>deg </xsl:text>
               </xsl:when>
               <xsl:when test="position()=2">
                  <xsl:value-of select="."/>
                  <xsl:text>min </xsl:text>
               </xsl:when>
               <xsl:when test="position()=3">
                  <xsl:value-of select="."/>
                  <xsl:text>sec </xsl:text>
               </xsl:when>
               <xsl:otherwise>
                  <xsl:value-of select="."/>
               </xsl:otherwise>
            </xsl:choose>
         </xsl:for-each>
      </xsl:function>

      <xsl:template match="location">
         <output>
            <Data><xsl:value-of select="f:coord(@latitude)"/></Data>
            <Data><xsl:value-of select="f:coord(@longitude)"/></Data>
         </output>
      </xsl:template>

   </xsl:stylesheet>


Using your '<location latitude="34.56.12 N" longitude="125.6.15 E"/>' input, the output would look like this:

   <?xml version="1.0" encoding="UTF-8"?>
   <output>
      <Data>34deg 56min 12sec N</Data>
      <Data>125deg 6min 15sec E</Data>
   </output>

cknell(_at_)onebox(_dot_)com wrote:
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.


--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--

<Prev in Thread] Current Thread [Next in Thread>