xsl-list
[Top] [All Lists]

RE: hard xsl problem

2004-07-26 03:10:28
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(_at_)gmail(_dot_)com] 
Sent: 26 July 2004 00:10
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
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:

--+------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: 
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--+--





<Prev in Thread] Current Thread [Next in Thread>