[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: text() children

Subject: Re: text() children
From: Steve Tinney <stinney@xxxxxxxxxxxxx>
Date: Fri, 17 Dec 1999 18:35:15 -0500
xsl copy of 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


Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.