[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

[xsl] Mixed Content Substring()


Subject: [xsl] Mixed Content Substring()
From: James Cummings <James.Cummings@xxxxxxxxx>
Date: Mon, 18 Aug 2003 09:21:33 +0100 (BST)

Hiya,

Let's say you have something like:

<foo>
<bar type="ant"><rub type="glyph">A.</rub> This is a test.</bar>
<bar type="ant"><rub type="glyph">A.</rub>   Another test.</bar>
<bar type="res"><rub type="glyph">R.</rub> This is a test.</bar>
<bar type="res"><rub type="glyph">Res.</rub> This is a test.</bar>
<bar type="res"> Certainly another test.</bar>
<bar type="res"><rub type="glyph">Ant.</rub> Boring test.</bar>
<bar type="ant">This is a test.</bar>
<bar type="hymn"><rub type="glyph">Y.</rub> Lah di Dah.</bar>
</foo>

And what you want to get each time you match 'bar' is the
first letter of the <bar> element not including <rub>.
I see a few approaches to this.  First, I could do something with
a nodeset that just gets rid of <rub> in its entirety and then
substring(normalize-space(.), 1,1) bar.  Is that the best way?

Another way is to build a complex set of conditionals.  The
<rub> will only every be equal to known things (A. Ant. R. Res., etc.)
and since these are a known length, I could do the above but
substring(normalize-space(.), 4,1) for A. and hard code the rest as well.

The way that hadn't occurred to me until just now is to count the number of
letters in the normalize-space(rub), and go in that many+1(?) in
the normalize-space(bar).

Any thoughts?  Am I missing something obvious?

-James

-- 
Dr James Cummings, James.Cummings@xxxxxxxxx, http://www.uea.ac.uk/~q503
Cursus Project, School of Music, University of East Anglia,
Norwich, Norfolk, NR4 7TJ, UK  Tel:(01603)593-595



 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list



Current Thread