Jitendra Kharche wrote:
Hi all,
I am facing a problem while writing an xsl.
In my xml I have a comma separated values (csv) list. On each of the
value in this list I want to do some processing. For that I want to
parse the csv string and store it into an array and pass the array to a
separate template from processing. Can we do this in xsl?
Regards,
Jitendra Kharche
Geometric Software Solutions Co. Ltd.
Work: +91-20-2290 6351
Hi Jitendra,
XSLT works with node trees, which you may view as something as a
hierarchical array. An element on the same node level can be accessed
using [] syntax, like in languages such as C and Java. And you can
"loop" like in those languages using the for-each construct. But XSLT is
not like those languages. XSLT is a declarative language and comes
closer to Lisp than to imparative languages like C, Java, Ruby, VB etc.
What comes close to your problem I think is this (XSLT 2.0):
<xsl:variable name="csv-contents" >
<!-- loop through the lines of the CSV file (replace unparsed-text
function with your CSV string or text-node) -->
<xsl:for-each select="tokenize(unparsed-text('some_csv_file.txt',
'UTF-8'), '\n|\r')">
<row>
<!-- loop through the cells of the current line -->
<xsl:for-each select="tokenize(., ';')" >
<cell><xsl:value-of select="normalize-space(.)"/></cell>
</xsl:for-each>
</row>
</xsl:for-each>
</xsl:variable>
You can now use this variable $csv-contents as a tree anywhere you like
(it's your "array" of nodes, pass it on to your "separate template",
included or otherwise). In XSLT 1.0 you cannot do such a thing (you
cannot built a temporary tree and use it again and you cannot use
tokenize). But as Mukul Gandhi pointed out, there are solutions around.
I suggest chapter 2.9 of the XSLT Cookbook (O'Reilly), it worked for me.
Cheers!
Abel
--~------------------------------------------------------------------
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>
--~--