Subject: Re: [xsl] CSV to XML transformation XSLT to include special characters? From: "Marney Cotterill" <marney@xxxxxxxxxxxxxxxxxxxx> Date: Thu, 03 Apr 2008 11:04:53 +1000 |
I found this from David Carlisle at http://www.dpawson.co.uk/xsl/sect2/N7150.html > is any simple method to convert the national > characters E D \ V and such to a format that the > XML parser understands? Most likely you don't need to convert anything, just tell the parser you are using Latin1 stick this <?xml version="1.0" encoding="iso-8859-1"?> at the top Tried this with no luck - any other ideas? > Hi Listers, > > I have modified an XSLT orgignally developed by Andrew Welch to transform a > CSV to an XML for importing data into a dynamic website. I am brand new to > XSL and XSLT and have hit a small snag with the transform. > > I've done some testing and I think it comes down to the inclusion of special > characters in my CSV, which essentially breaks the transform, giving a blank > result - it does not even display the error messege. > > Using XML 1.0 and processing with Kernow. > > XSLT 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:/fish.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()"/> > <xsl:element name="{.}"> > <xsl:value-of select="$lineItems[$pos]"/> > </xsl:element> > </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> > > An excerpt from my CSV: > > classdate,classname,classtime,classcode,classcost,xmodid,guestlink,classdesc > ription > 3/03/2008,Sydney eats presentsV,6.30pm - 8.30pm,ALI,$75,Ashley > Hughes,Ashley Hughes from Alio ,"Ashleyms time at Londonms River CafH and his > travels throughout Italy have given him a simple, flexible cooking style typical of > Italian cuisine. At this hands-on dinner class hemll show you how he combines > premium produce with simple fresh flavours to produce delicious Italian food." > > The "H" in CafH is a special character. When I delete and replace with a > normal"e" the stylesheet runs perfectly. > > Is there a way to include these special charters into the XSLT? > > Thanks, > Marney --
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] CSV to XML transformation, Marney Cotterill | Thread | Re: [xsl] CSV to XML transformation, David Carlisle |
[xsl] CSV to XML transformation XSL, Marney Cotterill | Date | Re: [xsl] CSV to XML transformation, David Carlisle |
Month |