Subject: RE: [xsl] hard xsl problem From: "Michael Kay" <mhk@xxxxxxxxx> Date: Mon, 26 Jul 2004 11:10:28 +0100 |
Handling implicit structure is always easier in XSLT 2.0, though this one is still a little tricky. I would do a first pass in which all the "(" characters (and preceding whitespace) are replaced by <lpar/> and all the ")" (and following whitespace) are replaced by <rpar/>. This is easily done in 2.0 using xsl:analyze-string. <xsl:template match="text()"> <xsl:analyze-string select="." regex="(\s*\()|(\)\s*)"> <xsl:matching-substring> <xsl:choose> <xsl:when test="contains(.,'(')><lpar/></xsl:when> <xsl:otherwise><rpar/></xsl:otherwise> </ </ </ </ Then in a second pass, use: <xsl:for-each-group group-starting-with="lpar|rpar"> <xsl:if test="self::rpar"> <xsl:copy-of select="current-group() except ."/> </ </ Not tested. Michael Kay > -----Original Message----- > From: Richard Bondi [mailto:rbondi@xxxxxxxxx] > Sent: 26 July 2004 00:10 > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx > Subject: [xsl] hard xsl problem > > I would be grateful for a solution to the following xsl problem. > > Example input: > ============== > <Paragraph> On October 30, clad in scarlet and ermine, Charles made > his entry into the papal palace (see <i>especially<i> <cite>30</cite>, > as well as <cite>20</cite>). He presented the Pope with a blue velvet > cape embroidered in pearls (<cite>234</cite>; <cite>12345</cite>) in a > design of angels (as well as a fleur-de-lys and stars). With no > footing except in French support, Clement's papacy would have vanished > in smoke.</Paragraph> > > Example output: > ============== > <Paragraph> On October 30, clad in scarlet and ermine, Charles made > his entry into the papal palace. He presented the Pope with a blue > velvet cope embroidered in pearls in a design of angels (as well as a > fleur-de-lys and stars). With no footing except in French support, > Clement's papacy would have vanished in smoke.</Paragraph> > > Problem in words: > ============== > The <cite> tags are always enclosed in parenthesis. As the result of a > transform (when a parameter passed into the xsl sheet is 'true') (a) > these parens, (b) their xml content, and (c) the space preceding the > open paren must be suppressed. Alternatively, (a)-(c) can be enclosed > in a tag. Parens that do not contain <cite> tags are to be left as is. > All of this is always inside a <Paragraph> tag. > > How to do this is the problem. > > I don't see how to do this even with a plugin, because it is unclear > to me how a plugin can be used to generate tags. It would of course be > more elegant to do this without a plugin. > > MTIA, > /r:b:
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] hard xsl problem, Sal Mangano | Thread | RE: [xsl] hard xsl problem, Sal Mangano |
[xsl] using exsl:node-set(), Markus Hanel | Date | RE: [xsl] using exsl:node-set(), Michael Kay |
Month |