xsl-list
[Top] [All Lists]

RE: hard xsl problem

2004-07-26 09:14:23
Michael,

It is cool to see we came upon the same basic solution. As I hinted in my
response it is a lot easier in XSLT 2.0. I love 2.0! It really raises the
bar on what you can do (easily) with XSLT. 

-Sal

-----Original Message-----
From: Michael Kay [mailto:mhk(_at_)mhk(_dot_)me(_dot_)uk] 
Sent: Monday, July 26, 2004 6:10 AM
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: RE: [xsl] hard xsl problem


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>
--+--




--+------------------------------------------------------------------
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>