|
[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
|






