|
[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] RE: Generating numeric character references
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: 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
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|

Cart








