[opencms-dev] (no subject) - retrieve xml content manually

Bernd Wolfsegger bw at code-create.com
Tue Sep 27 07:25:36 CEST 2005


I think the amount of code and its effect on performance is highly 
overestimated.
The source code will be compiled in very efficient byte code, depending on the 
style of coding.
So it's more a question of the coding style than the amount of source code.

What I do not understand in your code is why you have a instance variable 
"resource" and also a local variable "resource " in your getContent() method.
You never use the "instance" variable.

Or is the first part meant to be in an JSP?

In the getContent() method below you unmarshal the content nevertheless each 
time you request an element.

If you use the OpenCms caching mechanism in a clever way, most of the time the 
content will come from cache and no unmarshalling takes place at all.
It's seldom the case, that content changes form one minute to another, so it's 
not necessary to retrieve it for each request anew from the database.

There is a general Problem, that the whole xmlcontent of a resource is kept in 
one database field. So you have to use Java to retrieve the value of single 
elements and not SQL.
But in the past I have noticed that it is much faster, lets say, to retrieve 
10000 Datarows form a table in one suck and then get the one you want by 
using Java code, than to search for this row using SQL and accessing the 
database.

Java IS fast.

But may be my SQL code was not very efficient :)

You can use JSTL also to get hands on content, still using cms tags (This is 
just an example, based on nested xsd!):

<cms:contentcheck ifexists="Detail">
	<cms:contentloop element="Detail" >
		<cms:contentcheck ifexists="ImageBox">
			<c:set var="thumbImgWidth">
				<cms:contentshow element="ImageBox/ThumbImageWidth" />
			</c:set>
<%
String value = (String) pageContext.getAttribute("thumbImgWidth");
// Do something with your knowledge ...
%>
		</cms:contentcheck>
	</cms:contentloop>
</cms:contentcheck>

Kind regards, Bernd

On Tuesday, 27. September 2005 01:12, Peter Birchmeier wrote:
> Thanx, i didn't know that method. But after looking through its source
> code, i think its rather a slow way to retrieve xml content since the xml
> file must be unmarshalled for eaxh element...
>
> I tried to find a way with as less code as possible, which is still fast
> enough.
>
>
> something like that might do the job:
>
> import org.opencms.jsp.*, org.opencms.main.*, import org.opencms.file.*,
> org.opencms.file.collectors.*, import org.opencms.xml.*,
> org.opencms.xml.content.*;
>
> CmsJspActionElement cms = ..
>
> I_CmsResourceCollector collector =
> OpenCms.getResourceManager().getContentCollector(m_collectorName);
> List collectorResult = collector.getResults(cms.getObject(),
> m_collectorName, m_collectorParam);
>
> CmsResource resource = (CmsResource) collectorResult.get( 0..n );
>
> public String getContent( CmsResource resource, String element, Locale
> locale) {
> 	CmsFile file = CmsFile.upgrade( resource, cms.getCmsObject() );
> 	I_CmsXmlDocument content = CmsXmlContentFactory.unmarshal(
> cms.getCmsObject(), file );
>
> 	Locale loc = OpenCms.getLocaleManager().getBestMatchingLocale( locale,
> 		OpenCms.getLocaleManager().getDefaultLocales(cms,
> cms.getSitePath(resource)),
> 		content.getLocales(element));
>
> 	return content.getStringValue( element, loc );
> }
>
> hmmm.. i'm not sure if it is a good idea to use too much code..
> maybe anybody has a better idea? The most practical way would be if
> xmlcontentload-tags could be used together with scriptlets that request a
> specific xml content element from the loaded xml file...
>
> >From: Bernd Wolfsegger <bw at code-create.com>
> >Reply-To: Bernd Wolfsegger <bw at code-create.com>,The OpenCms mailing list
> ><opencms-dev at opencms.org>
> >To: The OpenCms mailing list <opencms-dev at opencms.org>
> >Subject: Re: [opencms-dev] (no subject)
> >Date: Mon, 26 Sep 2005 16:19:58 +0300
> >
> >Hi Peter,
> >
> >simply use "cms.getContent(String resourcePath, String elementName, Locale
> >locale)"
> >
> >Kind Regards, Bernd Wolfsegger
> >
> >On Monday, 26. September 2005 16:02, Peter Birchmeier wrote:
> > > Hi,
> > >
> > > I do a xml files load and query single xml elements by
> >
> ><cms:contentshow..
> >
> > > I'ld like to be able to have more options with the output, e.g. check a
> > > certain element whether it is empty or not (empty String "", not null).
> > >
> > > I couldn't find any way with the given standard xml tags. Have I
> >
> >overseen
> >
> > > anything?
> > >
> > > So my idea was to manually query the elements by jsp scriptlets. But as
> >
> >far
> >
> > > as I have seen in the CmsJspContentShowTag source code I would have to
> > > implement several steps to achieve the data. Therefore it might be
> >
> >easier
> >
> > > to do the whole xml content load manually, by calling the responsible
> > > Collector class....
> > >
> > > Is there a better way?
> > > thanks for your hints,
> > > kind regards, Peter
> > >
> > > _________________________________________________________________
> > > Behalten Sie Ihre Hotmails, den Messenger und die Suchfunktionen stets
> >
> >im
> >
> > > Auge! http://toolbar.msn.ch?&DI=165&XAPID=2170 Jetzt downloaden!
> > >
> > >
> > >
> > > _______________________________________________
> > > This mail is send to you from the opencms-dev mailing list
> > > To change your list options, or to unsubscribe from the list, please
> >
> >visit
> >
> > > http://mail.opencms.org/mailman/listinfo/opencms-dev
> >
> >--
> >
> >[  Code Create
> >[  Web Content Management and Presentation
> >
> >
> >[  Bernd Wolfsegger
> >[  Sun Certified Programmer for Java(TM) 2 Platform
> >
> >
> >[  Lohmeyerstrasse 13
> >[  10587 Berlin
> >[  Germany
> >[  Fon +49 (0)30 26555788
> >[  Fax +49 (0)30 2651835
> >[  Mobile +49 (0)163 6505622
> >
> >[  bw at code-create.com
> >[  http://www.code-create.com/
> >
> >
> >
> >_______________________________________________
> >This mail is send to you from the opencms-dev mailing list
> >To change your list options, or to unsubscribe from the list, please visit
> >http://mail.opencms.org/mailman/listinfo/opencms-dev
>
> _________________________________________________________________
> Essenzielle Infos von A-Z! Starten Sie eine Online-Recherche mit MSN
> Search! http://search.msn.ch/ Jetzt neu! Jetzt gratis downloaden!
>
>
>
> _______________________________________________
> This mail is send to you from the opencms-dev mailing list
> To change your list options, or to unsubscribe from the list, please visit
> http://mail.opencms.org/mailman/listinfo/opencms-dev

-- 

[  Code Create
[  Web Content Management and Presentation


[  Bernd Wolfsegger
[  Sun Certified Programmer for Java(TM) 2 Platform


[  Lohmeyerstrasse 13
[  10587 Berlin
[  Germany
[  Fon +49 (0)30 26555788
[  Fax +49 (0)30 2651835
[  Mobile +49 (0)163 6505622

[  bw at code-create.com
[  http://www.code-create.com/




More information about the opencms-dev mailing list