Subject: RE: [xsl] Generating numeric character references From: "Michael Kay" <michael.h.kay@xxxxxxxxxxxx> Date: Thu, 16 Jan 2003 14:56:06 -0000 |
Use a text editor, or perhaps a SAX filter, to replace "&#" by "&". Why use a power drill when you can do the job with a hammer? Michael Kay Software AG home: Michael.H.Kay@xxxxxxxxxxxx work: Michael.Kay@xxxxxxxxxxxxxx > -----Original Message----- > From: owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx > [mailto:owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx] On Behalf Of > Stuart Celarier > Sent: 14 January 2003 20:06 > To: 'XSL-List' > Subject: [xsl] Generating numeric character references > > > I'd like to transform specific text subtrings into numeric > character references during in an XSLT transformation. For > example, I want to transform all occurrences that look like > "&#173;" within a string into "­". > > Here's the back story. I have source XML that is generated > automatically from HTML by a third-party. The third-party > incorrectly handles entity references, so that "­" in > the original HTML in becomes "&#173;" in the XML. I want > to restore the damage done. To simplify things, I am only > interested in documents with ISO 8859-1 encoding. > > Below is a solution [1] that I am not pleased with. It is a > named template that recursively parses a string, trying to > replace references. This requires an <xsl:when> element for > each value of numeric character reference that might be > encountered (see the "additional cases here" comment). > Problems with this include linear search of values, omitted > values, and opportunity for error in mismatched values. > > Can anyone suggest a better approach to generating numeric > character references? I am would be fine restricting the > solution to MSXML or .NET's System.Xml.Xsl XSLT processors, > if that is an issue. > > Many thanks! > > Cheers, > Stuart > > > > [1] A less than happy solution: > > <xsl:template name="restoreNumCharRefs"> > <xsl:param name="string"/> > > <xsl:choose> > <xsl:when test="contains($string, '&')"> > <xsl:variable name="head" > select="substring-before($string, '&')"/> > <xsl:variable name="remainder" > select="substring-after($string, '&')"/> > <xsl:variable name="reference" > select="substring-before($remainder, ';')"/> > > <xsl:variable name="entity"> > <xsl:choose> > <xsl:when test="$reference='#167'">§</xsl:when> > <xsl:when test="$reference='#173'">­</xsl:when> > > <!-- additional cases here --> > > <xsl:otherwise>&<xsl:value-of > select="$reference"/>;</xsl:otherwise> > </xsl:choose> > </xsl:variable> > > <xsl:variable name="tail"> > <xsl:call-template name=" restoreNumCharRefs"> > <xsl:with-param name="string" > select="substring-after($remainder, ';')"/> > </xsl:call-template> > </xsl:variable> > > <xsl:value-of select="concat($head, $entity, $tail)"/> > </xsl:when> > <xsl:otherwise> > <xsl:value-of select="$string"/> > </xsl:otherwise> > </xsl:choose> > > </xsl:template> > > > XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list > > XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Generating numeric charac, Wendell Piez | Thread | [xsl] SAX filters (was Re: Generati, Mike Brown |
RE: [xsl] how to "save" a context?, Michael Kay | Date | [xsl] RE: [xsl] [XPath] matching el, David . Pawson |
Month |