Subject: RE: Re: encoding error when using cdata
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Wed, 25 Feb 2009 08:42:51 -0000
|
The serializer is the software that converts a tree representation of XML
into the lexical angle-bracket representation. If you ask your XSLT
processor to write the result to a tree (for example a DOM tree) then the
XSLT processor doesn't serialize and therefore doesn't use xsl:output; if
you've got lexical output then you probably got it by calling a method such
as toXML() on your DOM object. That would invoke a serializer that's part of
your DOM implementation, which doesn't know anything about the xsl:output
declaration in your stylesheet.
There's no point, incidentally, in constructing a DOM tree to hold the
result of your transformation if the only thing you are going to do is to
serialize it.
Michael Kay
http://www.saxonica.com/
> -----Original Message-----
> From: Mike Stroud [mailto:stroudmw@xxxxxxxxx]
> Sent: 25 February 2009 06:30
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: Re: encoding error when using cdata
>
> I'm sorry to have to admit that I have no idea how to check
> what kind of serializer I'm using. I don't even know what a
> serializer is. That gives me one more thing to read up on today.
>
> Mike.
>
> > Date: Tue, 24 Feb 2009 09:20:09 -0000
> > To: <xsl-list@xxxxxxxxxxxxxxxxxxxxxx>
> > From: "Michael Kay" <mike@xxxxxxxxxxxx>
> > Subject: RE: Re: encoding error when using cdata
> > Message-ID: <28527BCDF9D247048A274FEA963E47CE@Sealion>
> >
> > I strongly suspect that you are using the DOM serializer
> rather than
> > the XSLT serializer. Check the code used to run the
> transformation: if
> > you are sending the result to a DOM destination, then the XSLT
> > processor is not doing the serialization, and everything
> you say in xsl:output is ignored.
> >
> > Michael Kay
> > http://www.saxonica.com/
> >
> >> -----Original Message-----
> >> From: Mike Stroud [mailto:stroudmw@xxxxxxxxx]
> >> Sent: 24 February 2009 06:23
> >> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> >> Subject: Re: encoding error when using cdata
> >>
> >> Hello Michael & all,
> >>
> >> Many thanks for your reply. What I don't understand is why the
> >> resultant XML file is encoded like this: <?xml version="1.0"
> >> encoding="UTF-16"?>. I can't seem to change it! What I want is
> >> WINDOWS-1252, but I end up with UTF-16 no matter what I do (The
> >> source XML document is UTF-8). My XSL looks like this:
> >>
> >> <?xml version="1.0" encoding="Windows-1252"?> <xsl:stylesheet
> >> version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
> >> <xsl:output indent="yes" method="xml"
> >> cdata-section-elements="Name LongDesc"/> <xsl:template match="/"
> >> xmlns:wc="http://www.ptc.com/infoengine/1.0">
> >> <xsl:copy-of select="."/>
> >> </xsl:template>
> >> </xsl:stylesheet>
> >>
> >> Thanks again,
> >>
> >> Mike.
> >>
> >>
> >> > Date: Mon, 23 Feb 2009 09:35:00 -0000
> >> > To: <xsl-list@xxxxxxxxxxxxxxxxxxxxxx>
> >> > From: "Michael Kay" <mike@xxxxxxxxxxxx>
> >> > Subject: RE: encoding error when using cdata
> >> > Message-ID: <F96EBBFDBCD64FF788886401A4C8328C@Sealion>
> >> >
> >> > The error is Microsoft-specific, see for example
> >> >
> >> > http://support.microsoft.com/kb/275883
> >> >
> >> > Incidentally, your code shows inconsistencies in the spelling of
> >> > "description" and "longDesc". XML is case-sensitive.
> >> >
> >> > Michael Kay
> >> > http://www.saxonica.com/
> >> >
> >> >> -----Original Message-----
> >> >> From: Mike Stroud [mailto:stroudmw@xxxxxxxxx]
> >> >> Sent: 23 February 2009 09:13
> >> >> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> >> >> Subject: encoding error when using cdata
> >> >>
> >> >> Hello all,
> >> >>
> >> >> I've been experimenting with cdata because I've got some funny
> >> >> characters in my XML files. I've got something like this:
> >> >>
> >> >> <?xml version="1.0" encoding="UTF-8"?> <wc:COLLECTION
> >> >> xmlns:wc="http://www.ptc.com/infoengine/1.0">
> >> >> <ChangedParts NAME="ChangedParts" TYPE="Unknown"
> >> STATUS="0"> <Part>
> >> >> <Name>446RLi SMD ASSY</Name> <description></description>
> >> >> <LongDesc></LongDesc>
> >> >>
> >> >> etc...
> >> >>
> >> >> The XSL looks like this:
> >> >>
> >> >> <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet
> >> version="1.0"
> >> >> xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
> >> >> <xsl:output indent="yes" method="xml"
> >> >> cdata-section-elements="Name Description Longdesc"/>
> <xsl:template
> >> >> match="/" xmlns:wc="http://www.ptc.com/infoengine/1.0">
> >> >> <xsl:copy-of select="."/>
> >> >> </xsl:template>
> >> >> </xsl:stylesheet>
> >> >>
> >> >> And the resultant XML turns out like this...
> >> >>
> >> >> <?xml version="1.0" encoding="UTF-16"?> <wc:COLLECTION
> >> >> xmlns:wc="http://www.ptc.com/infoengine/1.0">
> >> >>
> >> >> etc...
> >> >>
> >> >> I now get the following error: Switch from current encoding to
> >> >> specified encoding not supported. Line: 1. <?xml version="1.0"
> >> >> encoding="UTF-16"?>
> >> >>
> >> >> Does anyone know how I can fix this? I've tried
> different encoding
> >> >> methods in the XSL file, but they appear to be ignored.
> >> >>
> >> >> Thanks,
> >> >>
> >> >> Mike.
|