Subject: Re: text() children
From: Steve Tinney <stinney@xxxxxxxxxxxxx>
Date: Fri, 17 Dec 1999 18:35:15 -0500
|
I dunno. I tried Mike Kay's hint with priorities but couldn't
make it fly. I think the following does what David asks for
in the statement below; can't help feeling there should be
something more elegant, though, and I bet it doesn't really
handle the real life cases ....
Steve
---
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="div">
<xsl:for-each select="./node()">
<xsl:choose>
<xsl:when test="name()='p'">
<xsl:copy-of select="."/>
</xsl:when>
<xsl:otherwise>
<xsl:if test="position()=1">
<p>
<xsl:value-of select="."/>
<xsl:call-template name="copy-non-p"/>
</p>
</xsl:if>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</xsl:template>
<xsl:template name="copy-non-p">
<xsl:param name="index" select="1"/>
<xsl:variable name="node"
select="./following-sibling::node()[$index]"/>
<xsl:if test="not(name($node)='p')">
<xsl:apply-templates select="$node"/>
<xsl:call-template name="copy-non-p">
<xsl:with-param name="index" select="$index+1"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
<xsl:template match="a">
<xsl:copy-of select=".|@*"/>
</xsl:template>
<xsl:template match="p">
<xsl:copy-of select="."/>
</xsl:template>
</xsl:stylesheet>
---
"Pawson, David" wrote:
>
> Sorry Phil, Mike, I still can't get it.
>
> <div>Primary contributions by David Ornstein
> <a href="mailto:davido@xxxxxxxxxxxxx">davido@xxxxxxxxxxxxx</a>
> and Kai Matthews with scientific review by Dr. Karl M. Johnson.
> <p>This document provides answers to common questions about Ebola. For
> more information about Ebola </p>
> </div>
>
> I want as output
>
> <p>Primary contributions by David Ornstein
> <a href="mailto:davido@xxxxxxxxxxxxx">davido@xxxxxxxxxxxxx</a>
> and Kai Matthews with scientific review by Dr. Karl M. Johnson. </p>
> <p>This document provides answers to common questions about Ebola. For
> more information about Ebola </p>
>
> The input tree is mixed pcdata and elements.
>
> If I match on div I then need to pull all the text() children nodes,
> (which will ignore the <a > content.)
>
> If I match on div/text() I can only tag the 'bits' of text either side of
> the
> <a> element, not all of it.
>
> (xpath tool shows it up great btw)
>
> How can I 'gather' all the text yet still process the <a> element
> within it?
>
> regards, DaveP
>
> XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
--
----------------------------------------------------------------------
Steve Tinney Babylonian Section
* University of Pennsylvania Museum
stinney@xxxxxxxxxxxxx Phila, PA. 215-898-4047
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
| Current Thread |
- Re: text() children, (continued)
- Phil Lanch - Fri, 17 Dec 1999 11:26:01 +0000
- Kay Michael - Fri, 17 Dec 1999 10:55:53 -0000
- Pawson, David - Fri, 17 Dec 1999 13:27:35 -0000
- Pawson, David - Fri, 17 Dec 1999 14:58:31 -0000
- Steve Tinney - Fri, 17 Dec 1999 18:35:15 -0500 <=
- David Carlisle - Mon, 20 Dec 1999 16:15:52 GMT
- Kay Michael - Fri, 17 Dec 1999 17:13:06 -0000
- Pawson, David - Mon, 20 Dec 1999 08:56:41 -0000
- Pawson, David - Tue, 21 Dec 1999 07:35:10 -0000
|
|