This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
Re: RE: A simple solution (Was: Re: One for tomorrow :-) )
- To: "Daniel Newman" <daniel dot newman at bis-web dot net>
- Subject: Re: [xsl] RE: A simple solution (Was: Re: One for tomorrow :-) )
- From: Jeni Tennison <mail at jenitennison dot com>
- Date: Wed, 4 Jul 2001 16:13:42 +0100
- CC: xsl-list at lists dot mulberrytech dot com
- Organization: Jeni Tennison Consulting Ltd
- References: <NEBBJGCDKMLHOAAONGKDEEBFCDAA.daniel.newman@bis-web.net>
- Reply-To: xsl-list at lists dot mulberrytech dot com
Hi Daniel,
>From your earlier descriptions, you want to merge all the NameAddressN
elements up to and including the one that ends in a comma, to give the
name, and then merge all the NameAddressN after the one that ends in a
comma to give the address.
In a template matching the GetTableData element, you can find the
NameAddressN element that ends with a comma with:
<xsl:variable name="last-name-element"
select="cs:*[starts-with(local-name(), 'NameAddress') and
substring(., string-length(.)) = ',']" />
To get the name, you can find all the NameAddressN elements that come
before this element, and iterate over them with:
<xsl:for-each
select="cs:*[starts-with(local-name(), 'NameAddress') and
following-sibling::cs:*[generate-id() =
generate-id($last-name-element)]">
<xsl:value-of select="." />
</xsl:for-each>
And then get the value of the line ending with the comma, but without
the comma, with:
<xsl:value-of
select="substring($last-name-element, 1,
string-length($last-name-element) - 1)" />
To get the address, you can iterate over all the NameAddressN elements
that come *after* the element that ends in a comma with:
<xsl:for-each
select="cs:*[starts-with(local-name(), 'NameAddress') and
preceding-sibling::cs:*[generate-id() =
generate-id($last-name-element)]">
<xsl:value-of select="." />
</xsl:for-each>
Alternatively, if you don't care about preserving the lines of the
address and can guarantee that the elements won't hold a comma before
the one that separates the name from the address, then you could
generate a string by concatenating all the NameAddressN elements:
<xsl:variable name="NameAddress">
<xsl:for-each
select="cs:*[starts-with(local-name(), 'NameAddress')]">
<xsl:value-of select="." />
</xsl:for-each>
</xsl:variable>
And then split this string using substring-before() and
substring-after() to get the name and address. You can get the name
with:
<xsl:value-of select="substring-before($NameAddress, ',')" />
And get the address with:
<xsl:value-of select="substring-after($NameAddress, ',')" />
Cheers,
Jeni
---
Jeni Tennison
http://www.jenitennison.com/
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list