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

Re: testing element's contents

Subject: Re: testing element's contents
From: Nathan Shaw <n8_shaw@xxxxxxxxx>
Date: Thu, 3 Oct 2002 09:56:12 -0700 (PDT)
test node content xsl
Thanks Wendell. Thinking it over, your simple template
of 

> <xsl:template match="p[not(normalize-space(.))]">
>    <xsl:apply-templates/>
> </xsl:template>

will not work, as much as I wish it would, as I am
allowing other elements such as <strong> and <em> and
I could get passed a node set like this

<p><strong>this is bold text</strong></p>

OR this

<p><em>this is bold text</em></p>

For both of those cases, they would need to get
wrapped in a p tag in the output. 

So, I do need to specifically look to see if the p
element's child nodes are made up of either

1) only a Media element
OR
2) only a Media element wrapped by a Link element

If either of those cases is true, I do not want to
wrap the output in a p tag. Otherwise, I do.

I hope that makes it a bit clearer.

--nate


--- Wendell Piez <wapiez@xxxxxxxxxxxxxxxx> wrote:
> Hi Nate,
> 
> At 11:08 AM 10/3/2002, you wrote:
> >hi all,
> >
> >Thanks to everyone who gave me advice on my
> previous
> >post about images and captions. Now, I have another
> >tricky lil' xslt problem. If a paragraph element
> >contains ONLY a media element OR a media element
> >surrounded by a link element and nothing more
> (read,
> >no other nodes, be they text or not), such as:
> >
> ><p><img
> >src="http://www.mylocal.gov/images/nasausa.gif"
> >height="255" width="432"/></p>
> >
> >I need to strip the p tags out of resulting output.
> 
> Okay. Quibbles: translated into XSL-speak, what you
> want to do is process 
> the children of p, but not create any node for the p
> itself. (XSLT doesn't 
> know from 'tags', it knows about nodes, meaning
> things like elements and 
> attributes.) Also: you seem to be giving us
> something different from 
> <Media>....
> 
> >However, if it does contain other nodes, such as:
> >
> ><p><img
> >src="http://www.mylocal.gov/images/nasausa.gif"
> >height="255" width="432"/>This is my news release.
> The
> >authors will be typing the news release content in
> >here! I am not sure what this news release is even
> >about, but lets see how it comes out in XML, shall
> we?
> >As I see it coming out as:</p>
> >
> >I need to leave it alone.
> 
> Could your problem be restated fairly as "if there's
> any text content in 
> the paragraph, I need a paragraph in my output to
> wrap it, otherwise not"?
> 
> If so, you could do:
> 
> <xsl:template match="p">
>    <xsl:choose>
>      <xsl:when test="normalize-space(.)">
>        <!-- this tests true if the paragraph has any
> string value
>             at all after whitespace normalization.
> This only occurs
>             if the paragraph or any of its
> descendants has non-whitespace
>             text content -->
>        <p>
>           <xsl:apply-templates/>
>        </p>
>      </xsl:when>
>      <xsl:otherwise>
>        <xsl:apply-templates/>
>      </xsl:otherwise>
>    </xsl:choose>
> </xsl:template>
> 
> This could also be expressed as two simpler
> templates:
> 
> <xsl:template match="p">
>    <p>
>      <xsl:apply-templates/>
>    </p>
> </xsl:template>
> 
> <xsl:template match="p[not(normalize-space(.))]">
>    <xsl:apply-templates/>
> </xsl:template>
> 
> Here, the first template serves as a default, and
> the second one fires 
> whenever it matches but not otherwise (it has a
> higher priority since its 
> match is more complex).
> 
> If your logic is more complex than what I'm
> inferring (e.g. if it is 
> actually more dependent on the actual type of nodes
> you have down there, 
> Media or whatever) you need to do something closer
> to what you already 
> have. Refine the logic of your requirement and you
> can refine the code....
> 
> Cheers,
> Wendell
> 
> >Here is what I have so far. It only looks to see if
> a
> >media element or a media element wrapped by a link
> >element exists, but does not consider if there is a
> >text node after a media or link element.
> >
> ><xsl:template match="p">
> ><xsl:choose>
> >         <xsl:when
> test="((descendant::*[1])[self::Link] and
> >(descendant::*[2])[self::Media]) or
>
>(descendant::*[1])[self::Media]"><xsl:apply-templates
> >/></xsl:when>
> >         <xsl:otherwise><p><xsl:apply-templates
> >/></p></xsl:otherwise>
> ></xsl:choose>
> ></xsl:template>
> 
> 
>
======================================================================
> Wendell Piez                           
> mailto:wapiez@xxxxxxxxxxxxxxxx
> Mulberry Technologies, Inc.               
> http://www.mulberrytech.com
> 17 West Jefferson Street                    Direct
> Phone: 301/315-9635
> Suite 207                                         
> Phone: 301/315-9631
> Rockville, MD  20850                                
> Fax: 301/315-8285
>
----------------------------------------------------------------------
>    Mulberry Technologies: A Consultancy Specializing
> in SGML and XML
>
======================================================================
> 
> 
>  XSL-List info and archive: 
> http://www.mulberrytech.com/xsl/xsl-list
> 


__________________________________________________
Do you Yahoo!?
New DSL Internet Access from SBC & Yahoo!
http://sbc.yahoo.com

 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.