|
[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: text() children
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
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|

Cart








