Subject: Re: [xsl] Modification to The CSV to XML transform XSLT v2 from Andrew Welch From: "Marney Cotterill" <marney@xxxxxxxxxxxxxxxxxxxx> Date: Fri, 28 Mar 2008 12:24:05 +1000 |
Quote from Andrew "If you do have problems, I would recommend leaving this transform as-is, then running another transform over the result to convert the attributes values to element names which handles any problem names." I have found a snipped from a style sheet that I think will to do the transform Andrew has suggested above, but i'm not sure how to implement it - or if it is what you are suggesting. The snippet: <xsl:template match="*" name="main"> <xsl:element name="{local-name()}"> <xsl:apply-templates select="@*|node()"/> </xsl:element> </xsl:template> <xsl:template match="@*"> <xsl:attribute name="{local-name()}"> <xsl:value-of select="."/> </xsl:attribute> </xsl:template> <xsl:template match="processing-instruction()|comment()"> <xsl:copy> <xsl:apply-templates select="node()"/> </xsl:copy> </xsl:template> Not sure how to add this into my Stylesheet, below: <?xml version="1.0"?> <!-- A CSV to XML transform Version 2 Andrew Welch http://andrewjwelch.com Modify or supply the $pathToCSV parameter and run the transform using "main" as the initial template. For bug reports or modification requests contact me at andrew.j.welch@xxxxxxxxx --> <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:fn="fn" exclude-result-prefixes="xs fn"> <xsl:output indent="yes" encoding="US-ASCII"/> <xsl:param name="pathToCSV" select="'file:///c:/test.csv'"/> <xsl:function name="fn:getTokens" as="xs:string+"> <xsl:param name="str" as="xs:string"/> <xsl:analyze-string select="concat($str, ',')" regex='(("[^"]*")+|[^,]*),'> <xsl:matching-substring> <xsl:sequence select='replace(regex-group(1), "^""|""$|("")""", "$1")'/> </xsl:matching-substring> </xsl:analyze-string> </xsl:function> <xsl:template match="/" name="main"> <xsl:variable name="csvconverted"> <xsl:choose> <xsl:when test="unparsed-text-available($pathToCSV)"> <xsl:variable name="csv" select="unparsed-text($pathToCSV)"/> <xsl:variable name="lines" select="tokenize($csv, '
')" as="xs:string+"/> <xsl:variable name="elemNames" select="fn:getTokens($lines[1])" as="xs:string+"/> <root> <xsl:for-each select="$lines[position() > 1]"> <row> <xsl:variable name="lineItems" select="fn:getTokens(.)" as="xs:string+"/> <xsl:for-each select="$elemNames"> <xsl:variable name="pos" select="position()"/> <elem name="{.}"> <xsl:value-of select="$lineItems[$pos]"/> </elem> </xsl:for-each> </row> </xsl:for-each> </root> </xsl:when> <xsl:otherwise> <xsl:text>Cannot locate : </xsl:text> <xsl:value-of select="$pathToCSV"/> </xsl:otherwise> </xsl:choose> </xsl:variable> <xsl:apply-templates select="$csvconverted/root"/> </xsl:template> <xsl:template match="/root"> <xmodexport version="4.0" generationdate="2008-03-27 22:52:04.984" portalid="0"> <records> <xsl:apply-templates select="row"> </xsl:apply-templates> </records> </xmodexport> </xsl:template> <xsl:template match="row"> <record id="-1" formid="22" portalid="0" adduser="1" updateuser="1" approved="true" dateadded="2008-04-18 00:00:00.000" datemodified="2006-04- 18 00:00:00.000" displaydate="2006-04-17 00:00:00.000" expirydate="9999-12- 31 23:59:59.000"> <InstanceData> <xsl:text disable-output-escaping="yes"><![CDATA[</xsl:text> <instance> <xsl:copy-of select="./*"></xsl:copy-of> </instance> <xsl:text disable-output-escaping="yes">]]></xsl:text> </InstanceData> </record> </xsl:template> </xsl:stylesheet> I know it has to go inbetween the two templates, with another variable so I can call the transformed data into my second template. Any direction would be great! Thanks for all the pointers! Marney
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Modification to The CSV t, Marney Cotterill | Thread | [xsl] How do I write this in xsl wh, Z W |
Re: [xsl] XSLT processor for Mac OS, Steve Ball | Date | [xsl] MS Word to Excel using XSLT, Byomokesh Sahoo |
Month |