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

Re: Perplexing Problem in Embedding Stylesheet

Subject: Re: Perplexing Problem in Embedding Stylesheet
From: Mike Brown <mike@xxxxxxxx>
Date: Wed, 31 Oct 2001 19:10:47 -0700 (MST)
hyperreal.org chris disappeared
Sean Kelly wrote:
> This worked to some degree, however when I place the <xsl:value-of select>
> tags in seperate (and correctly nested) <p></p> tags, the data gets
> displayed as one line, and the <b></b> gets ignored so does <i></i> and
> linebreaks <br />. !!!!!!!

I might be assuming too much, but it appears that what you are thinking of
as "the data" is wrong, you aren't understanding what xsl:value-of really
does, and as David Carlisle stated, you need to realize that your XPath
expressions are relative to the node currently being processed, which
changes inside an xsl:for-each vs what it was elsewhere in the template.
I'll address the other 2 points.

Take this example:

<someData><p><i>hello</i> <b>world</b></p></someData>

The content of the "someData" element is not a string of character data
consisting of "<p><i>hello</i> <b>world</b></p>". Rather, the XML was
first parsed into this logical tree:

   element 'someData'
    |__element 'p'
        |__element 'i'
        |    |__Unicode character data 'hello'
        |__Unicode character data ' '
        |__element 'b'
             |__Unicode character data 'world'

Note that the markup - the tags - disappeared.

The info was fed to the XSLT processing application, probably as a series
of SAX events. The XSLT processor then exposed this info to you using the
XPath/XSLT data model, in which everything is addressable as a more useful
tree of nodes:

   element 'someData' w/string-value ('hello'+' '+'world')
    |
    |__element 'p' w/string-value ('hello'+' '+'world')
        |
        |__element node 'i' w/string-value ('hello')
        |    |
        |    |__text node w/string-value ('hello')
        |
        |__text node w/string-value ' '
        |
        |__element node 'b' w/string-value ('world')
             |
             |__text node w/string-value ('world')

All your XPath and XSLT operations use this tree. In your stylesheet when
you say <xsl:value-of select="someData"/> you are essentially directing
the XSLT processor to create in the result tree (which will hopefully be
serialized when it's finished) a text node with a string-value that is the
same as the string-value of all the "someData" element children of the
node currently being processed. If you're currently processing the parent
node of 'someData', then the value-of will effectively produce the
concatenation of the string-values of someData's descendant text nodes
(the definition of an element's string-value) -- 'hello world'.

If you use xsl:copy-of instead of xsl:value-of, the entire branch(es)
of nodes you select will be copied verbatim to the result tree. I
believe that's what you really want.

   - Mike
____________________________________________________________________________
  mike j. brown, fourthought.com  |  xml/xslt: http://skew.org/xml/
  denver/boulder, colorado, usa   |  personal: http://hyperreal.org/~mike/

 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.