Subject: Re: [xsl] Fw: Select entire XML doc [FURTHER] From: "Karl Stubsjoen" <karl@xxxxxxxxxxxxx> Date: Wed, 26 Feb 2003 22:33:06 -0700 |
Wow... that was most awesome. Thanks for the help, it really made a lot of sense. And indeed, I do need to be careful of HTML tags becoming malformed. Once the XML has been propery serialized in a text area element, what is the proper way to deserialize it? Karl ----- Original Message ----- From: "Mike Brown" <mike@xxxxxxxx> To: <xsl-list@xxxxxxxxxxxxxxxxxxxxxx> Sent: Thursday, February 27, 2003 7:44 PM Subject: Re: [xsl] Fw: Select entire XML doc [FURTHER] > Karl Stubsjoen wrote: > > Further: > > I need to preserve the XML data as XML, so maybe change the output of the > > template to XML. Is that possible? > > Thanks, > > Karl > > Browsers are lenient when they encounter markup inside a textarea. > It is actually an error to do something like > > <textarea><someothertag>foo</someothertag></textarea> > > which is what you are generating. You are supposed to generate > > <textarea><someothertag>foo</someothertag></textarea> > > Presumably you are outputting with the HTML output method. If your XML > contains any HTML elements in an empty namespace, you will find that they > will be output in HTML syntax, which means for example that <br/> will come > out as <br>, thus making your textarea contain non-well-formed XML, which > presumably is not what you want. > > These two reasons are why you want to output your XML in serialized form. To > understand what we mean by "serialized form" you must first understand the > concept of a node tree (the DOM-like tree that XPath and XSLT uses) as being > the parsed, deserialized representation of an XML document, and you must > understand that your stylesheet only provides instructions for creating a new > node tree; the xsl:output instruction merely provides a hint to the processor > as to how you would prefer that new node tree to be serialized after it has > been constructed. > > What you want to create in your node tree is (here in my best ASCII art): > > element 'textarea' > | > |___text '<lotsOfXml/>' > > Understand that the serialized form of these two nodes when using the html > or xml output methods would be > > <textarea><lotsOfXml/></textarea> > > which is what you want. > > What you have done by using xsl:copy-of is created something like: > > element 'textarea' > | > |___element 'lotsOfXml' > | > |___element 'childOfLotsOfXml' > : > ... > > In other words you took the whole source tree, sans the root node, and copied it > into the result tree as a child of the textarea element. This was then serialized > as > > <textarea><lotsOfXml><childOfLotsOfXml>...</childOfLotsOfXml></lotsOfXml></t extarea> > > and as I noted above, if you used html output method, any 'br' or 'hr' in your XML > would come out as <br> and <hr>. > > What you should do is look into using either an extension function that serializes > the XML in an HTML character data safe way, or use a template that does the same thing. > Evan Lenz wrote a nice one at http://www.xmlportfolio.com/xml-to-string/ > > All you need to do is import it and then call the xml-to-string template, passing a > parameter named node-set, which is the set you want to serialize: > > <xsl:import href="xml-to-string.xsl"/> > > <xsl:template match="/"> > <textarea> > <xsl:call-template name="xml-to-string"> > <xsl:with-param name="node-set" select="."/> > </xsl:call-template> > </textarea> > </xsl:template> > > Mike > > -- > Mike J. Brown | http://skew.org/~mike/resume/ > Denver, CO, USA | http://skew.org/xml/ > > XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list > > XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Fw: Select entire XML doc, Mike Brown | Thread | Re: [xsl] Fw: Select entire XML doc, Mike Brown |
Re: [xsl] nodeSet, nodeList, and $f, Wendell Piez | Date | [xsl] XSL 2.0 xsl:result-document a, Jarkko Moilanen |
Month |