Parsing comma-separated values with XSL?

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • RogerTBrick

    Parsing comma-separated values with XSL?

    Cheers for the help last time guys. Again this is probably dead
    simple but try as I might, I just can't work it out.

    THe XML file I am being give contains some code value that need to be
    exchanged for text in the final output (to HTML as it happens).
    <root>
    <thingy code="2"/>
    <root>

    My first solution (the one I thought would be easiest) was you use two
    comma spearated lists and simply grab the correct text value based on
    the index.
    <xsl:variable name="codes">1, 2,3,4</xsl:variable>
    <xsl:variable name="text">aaa ,bbb,ccc,ddd</xsl:variable>

    But I am stumped. Is this even possible with XSL? Or is there a
    better way of doing the substitution that I'm missing?

    Thanks again,

    J.
  • Martin Honnen

    #2
    Re: Parsing comma-separated values with XSL?



    RogerTBrick wrote:

    [color=blue]
    > THe XML file I am being give contains some code value that need to be
    > exchanged for text in the final output (to HTML as it happens).
    > <root>
    > <thingy code="2"/>
    > <root>
    >
    > My first solution (the one I thought would be easiest) was you use two
    > comma spearated lists and simply grab the correct text value based on
    > the index.
    > <xsl:variable name="codes">1, 2,3,4</xsl:variable>
    > <xsl:variable name="text">aaa ,bbb,ccc,ddd</xsl:variable>
    >
    > But I am stumped. Is this even possible with XSL? Or is there a
    > better way of doing the substitution that I'm missing?[/color]

    You can build a map in the XSLT stylesheet using elements in a separate
    namespace and access it as follows

    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:styleshe et
    xmlns:xsl="http ://www.w3.org/1999/XSL/Transform"
    version="1.0"
    xmlns:mp="http://example.com/2005/03/map1">

    <xsl:param name="searchKey " select="1" />

    <map xmlns="http://example.com/2005/03/map1">
    <item>
    <key>1</key>
    <value>aaa</value>
    </item>
    <item>
    <key>2</key>
    <value>bbb</value>
    </item>
    </map>

    <xsl:template match="/">
    <result>
    <xsl:value-of
    select="documen t('')/xsl:stylesheet/mp:map/mp:item[mp:key =
    $searchKey]/mp:value" />
    </result>
    </xsl:template>

    </xsl:stylesheet>


    --

    Martin Honnen

    Comment

    • David Carlisle

      #3
      Re: Parsing comma-separated values with XSL?

      [color=blue]
      > But I am stumped. Is this even possible with XSL?[/color]

      yes but string handling isn't xslt1's strong point, It's rather better
      at handling xml structure.

      I'd stick

      <things>
      <text>aaa</text>
      <text>bbb</text>
      <text>ccc</text>
      </things>

      in things.xml then do

      <xsl:template match="thingy">
      <xsl:copy-of
      select="documen t('things.xml')/
      things/text[position()=curr ent()/@code]/node()"/>
      </xsl:template>

      or if your codes don't allways go 1 2 3

      I'd stick
      <things>
      <text code="x">aaa</text>
      <text code="y">bbb</text>
      <text code="z">ccc</text>
      </things>

      in things.xml then do

      <xsl:template match="thingy">
      <xsl:copy-of
      select="documen t('things.xml')/
      things/text[@code=current()/@code]/node()"/>
      </xsl:template>

      so as to extract on the code attribute not on position.

      If your list is long you could use a key to speed up searching for the
      right replacement.

      David

      Comment

      • RogerTBrick

        #4
        Re: Parsing comma-separated values with XSL?

        David Carlisle <davidc@nag.co. uk> wrote in message news:<yg47jknqp q7.fsf@penguin. nag.co.uk>...[color=blue]
        > yes but string handling isn't xslt1's strong point, It's rather better
        > at handling xml structure.
        >
        > I'd stick
        >
        > <things>
        > <text>aaa</text>
        > <text>bbb</text>
        > <text>ccc</text>
        > </things>[/color]
        Ooo, you've no idea how much I wish I could do that. Thanks for the
        help guys, I knew it was a filthy hack when I started, but needs must
        and all that.

        J.

        Comment

        Working...