cocoon-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Terry Brick <terry_brick2...@yahoo.com>
Subject Re: REQ: An "escapeXml" attribute in JXT macro/script output
Date Wed, 09 Jun 2004 13:53:23 GMT
Thanks for the reply.  I have a similar workaround, but I do consider it a 'workaround'.  If
we
find that a significant number of users are doing things like this, then that tells me simpler,
'built-in' approach would be more appropriate.  Maybe this is not the case though... if I'm
the
only one doing this, then there's certainly no need to build it into the framework ;)


--- Leszek Gawron <lgawron@mobilebox.pl> wrote:
> Terry Brick wrote:
> > Hello,
> > This request is carried over from the users list regarding introducing XML from
a
> > variable/component into the JXT output stream.
> > For example, let's say I have Java bean with a String property that holds XML text.
 If, in my
> > template, I do something like...
> > ${MyBean.XML}
> > ... Then all of the XML characters are escaped.
> > For example,
> > <para>
> > ..becomes..
> > &lt;para&gt;
> > 
> > I would think that for most Cocoon users, this is undesirable behavior most of the
time.
> > The current workaround is to have the bean property return a DOM Document instead
of a String.
> 
> > However, in many cases, other than to accomodate this workaround, I have no other
need to
> create a
> > DOM document within my Java component.... so it seems like there could be some unecessary
> overhead
> > associated with doing that.  I guess that depends on how Cocoon handles the doc...
maybe it's
> a
> > wash.
> > Anyway, an escapeXml="true/false" attribute on the JX output tags (similar to JSTL)
would
> > certainly be handy IMO.
> > 
> > Thanks!
> Solution:
> 
> >> function stringToSAX( str, consumer, ignoreRootElement ) {
> >> 	var is = new Packages.org.xml.sax.InputSource( new java.io.StringReader( str
) );
> >> 	var ignore = ( ignoreRootElement == "true" );
> >> 	var parser = null;
> >> 	var includeConsumer = new org.apache.cocoon.xml.IncludeXMLConsumer( consumer,
consumer );
> >> 	includeConsumer.setIgnoreRootElement( true );
> >> 	try {	
> >> 		parser = cocoon.getComponent( Packages.org.apache.excalibur.xml.sax.SAXParser.ROLE
);
> >> 		parser.parse( is, includeConsumer );	
> >> 	} finally {
> >> 		if ( parser != null ) cocoon.releaseComponent( parser );
> >> 	}
> >> }
> put it into session by
> cocoon.session.setAttribute( "saxer", stringToSAX  );
> 
> implement a jx:macro:
> >> 	<jx:macro name="xmlize">
> >> 		<jx:parameter name="value"/>
> >> 		<jx:parameter name="ignoreRoot" default="false"/>
> >> 		<jx:set var="ignored" value="${cocoon.session.stringToSAX( value, cocoon.consumer,
> ignoreRoot )}"/>
> >> 	</jx:macro>
> > 
> 
> use it like this:
> 
> <xmlize value="${xmlVal}" ignoreRoot="true"/>
> 
> and you're done.
> 	LG



	
		
__________________________________
Do you Yahoo!?
Friends.  Fun.  Try the all-new Yahoo! Messenger.
http://messenger.yahoo.com/ 

Mime
View raw message