xsl-list
[Top] [All Lists]

Re: [xsl] XPath (regex?) question about $& in an XSLT stylesheet

2008-08-18 17:10:51
Thanks!
That was perfect.
Mark

--------------------------------------------------
From: "G. Ken Holman" <gkholman(_at_)CraneSoftwrights(_dot_)com>
Sent: Monday, August 18, 2008 4:59 PM
To: <xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com>
Subject: Re: [xsl] XPath (regex?) question about $& in an XSLT  stylesheet

Actually, even creating the first group is unnecessary. This revision only captures a single group being the parenthesized content of the string.

I hope this helps.

. . . . . . . . . . . Ken

t:\ftemp>type wilson.xml
<Person>Benes (senior), Frances</Person>

t:\ftemp>type wilson.xsl
<?xml version="1.0" encoding="US-ASCII"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
                version="2.0">

<xsl:template match="*">
  <xsl:copy>
    <xsl:value-of select="replace(., '.*(\([a-zA-Z]+\)).*', '$1' )"/>
  </xsl:copy>
</xsl:template>

</xsl:stylesheet>
t:\ftemp>xslt2 wilson.xml wilson.xsl con
<?xml version="1.0" encoding="UTF-8"?><Person>(senior)</Person>
t:\ftemp>


At 2008-08-18 19:07 -0400, I wrote:
At 2008-08-18 15:46 -0700, Mark Wilson wrote:
I have an element
<Person>Benes (senior), Frances</Person>.

I can remove the '(senior)' from the data using
<xsl:value-of select="replace(., '\([a-zA-Z]+\)', ' ' )"/>

which gives me
<Person>Benes , Frances</Person>
but I want just the opposite:
<Person>(senior)</Person>

You can use regular expression groups in XSLT using unescaped parentheses. I hope the example below helps where I wrap the text before, in, and after as three groups. Creating the third group is unnecessary, but I left it in for completeness. You might need something more creative based on what you allow in your input.

. . . . . . . . . . Ken

t:\ftemp>type wilson.xml
<Person>Benes (senior), Frances</Person>

t:\ftemp>type wilson.xsl
<?xml version="1.0" encoding="US-ASCII"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
                version="2.0">

<xsl:template match="*">
  <xsl:element name="{name(.)}" namespace="{namespace-uri(.)}">
    <xsl:value-of select="replace(., '(.*)(\([a-zA-Z]+\))(.*)', '$2' )"/>
  </xsl:element>
</xsl:template>

</xsl:stylesheet>
t:\ftemp>xslt2 wilson.xml wilson.xsl con
<?xml version="1.0" encoding="UTF-8"?><Person>(senior)</Person>
t:\ftemp>


--
Upcoming XSLT/XSL-FO hands-on courses:      Wellington, NZ 2009-01
Training tools: Comprehensive interactive XSLT/XPath 1.0/2.0 video
G. Ken Holman                 mailto:gkholman(_at_)CraneSoftwrights(_dot_)com
Crane Softwrights Ltd.          http://www.CraneSoftwrights.com/s/
Male Cancer Awareness Nov'07  http://www.CraneSoftwrights.com/s/bc
Legal business disclaimers:  http://www.CraneSoftwrights.com/legal


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