|
[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: Perplexing Problem in Embedding Stylesheet
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
|
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








