Re: text() children

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