This is the mail archive of the xsl-list@mulberrytech.com mailing list .


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: Parsing text nodes


Martynas Lelevicius wrote:
> 
> Hi,
> 
> I have such XML document:
> 
> <rootNode>
>     <line>
>         <coords>73, 49; 203, 117;</coords>
>     </line>
>     <line>
>         <coords>0, 0; 25, 60; 25, 120; 203, 120;</coords>
>     </line>
>     <line>
>         <coords>73, 30; 235, 30; 235, 107;</coords>
>     </line>
> </rootNode>
> 
> How can I process each (and all) pairs of coordinates? Coordinates are
> separated with semicolo and number of pairs in line can vary.
> ...
> <xsl:for-each select="/rootNode/line">
> <!-- What should go here to process line coordinates -->
> </xsl:for-each>

I would use co-recursive templates on the text nodes and
substring-before. Something like this:

<xsl:template name="left">
  <xsl:param name="sofar"/>
  <xsl:text>(</xsl:text>
  <xsl:value-of select="substring-before($sofar, ',')"/>
  <xsl:call-template name="right">
     <xsl:with-param name="sofar"
                     select="substring-after($sofar, ',')"/>
  </xsl:call-template>
</xsl:template>

<xsl:template name="right">
  <xsl:param name="sofar"/>
  <xsl:value-of select="substring-before($sofar, ';')"/>
  <xsl:text>)</xsl:text>
  <xsl:call-template name="left">
     <xsl:with-param name="sofar"
                     select="substring-after($sofar, ';')"/>
  </xsl:call-template>
</xsl:template>

The syntax is probably a bit wrong, and you'd need to put in a 
terminating condition, but I hope you get the idea. You would call the
left template first with the text() as the "sofar" paramater.

-- 
Mike.Moran@ee.ed.ac.uk 
                   Web: http://houseofmoran.com/
               AvantGo: http://houseofmoran.com/Lite/

 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]