[jdom-interest] XML and XSL
Daniel Hoppe
hoppe at sitewaerts.de
Mon Aug 20 02:10:58 PDT 2001
Hi Peter,
Nothing weird so far, sounds familiar ;-). You want to transform XML to HTML
and return the result to the browser. Do you need to transform with the same
stylesheet several times?
I don't know of a function of the node to transform, but what you might do
is the following:
- Use JAXP / Trax to obtain a TransformerFactory (http://java.sun.com/xml/),
get a Templates instance and a Transformer instance for each Transformation
and use this to transform your input.
- As you probably start with a JDOM DOM you might want to check
http://www-106.ibm.com/developerworks/java/library/x-tipjdom.html for an
example how to fill the gap between JDOM and the transformer efficiently.
This basic example could (better 'might', untested...) do what you need:
package de.sitewaerts.futuna.cs.common;
import java.util.*;
import java.io.*;
import javax.naming.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.xml.transform.stream.*;
import javax.xml.transform.*;
public class XMLServlet extends HttpServlet
{
private Category log;
private Templates tps;
public ComponentStartupServlet()
{
log = Category.getInstance(this.getClass().getName());
}
public void init() throws ServletException
{
ServletConfig sc = getServletConfig();
String sStyleSheet = sc.getInitParameter("stylesheet");
if (sStyleSheet == null)
throw new ServletException("Please specify the init parameter
'stylesheet'")
try
{
Source sourceXSL = new StreamSource(new FileInputStream(sStyleSheet
));
sourceXSL.setSystemId("fakeid");
TransformerFactory tf = TransformerFactory.newInstance();
tps = tf.newTemplates(sourceXSL);
}
catch (TransformerConfigurationException tce)
{
log.error("Problem creating template", tce);
throw new ServletException("Problem creating template:" +
tce.getMessage());
}
}
public void doGet (HttpServletRequest request, HttpServletResponse
response)
throws ServletException, IOException
{
try
{
response.setContentType("text/html; charset=UTF-8");
OutputStream osTarget = response.getOutputStream();
Source sourceXML = new StreamSource(...); // Get an InputStream or
whatever gives you your XML document
Result resultTarget = new StreamResult(osTarget);
Transformer t = tps.newTransformer();
/* Maybe the stylesheet needs some parameters:
if (hmParameters != null)
{
Iterator it = hmParameters.keySet().iterator();
String sKey = null;
while (it.hasNext())
{
sKey = (String)it.next();
t.setParameter(sKey, hmParameters.get(sKey));
}
}
*/
t.transform(sourceXML, resultTarget);
log.info("Transformed with transformer '" + t.getClass().getName() +
"'.");
}
catch (TransformerException te)
{
log.error("A TransformerException occured", te);
throw new ServletException("A TransformerException occured: '"
+ te.getMessage());
}
}
}
Basically that's what I would do, maybe someone one the list has a better
solution? You could of course wrap the same functionality in a Custom Tag on
a JSP or directly with a JSP.
Cheers,
Daniel
> -----Original Message-----
> From: jdom-interest-admin at jdom.org
> [mailto:jdom-interest-admin at jdom.org]On Behalf Of Peter Barraud
> Sent: Monday, August 20, 2001 9:09 AM
> To: Jdom
> Subject: [jdom-interest] XML and XSL
>
>
> Hi,
> Is there a way to use an XML file with an XSL file and render
> the output to
> a browser. Ok I know that sound weird but here is what I want to do:
> I have an XML file and an XSL file that contains parsing code
> to get HTML
> out of the XML. So what I want is that a servlet/JSP will
> return the result
> as an output to the browser.
> I have done this in ASP and MSXML. There is a function (of
> the XML DOM)
> called Transform node that takes an XSL as an argument and
> return the parsed
> result.
> I hope this is not too very confusing, and my apologies if I
> have used some
> vague terms but any help would be really really appreciated
> PB
>
> _______________________________________________
> To control your jdom-interest membership:
> http://lists.denveronline.net/mailman/options/jdom-interest/yo
uraddr at yourhost.com
<<<<<<<<<<<<<<<<<<<<<<<<<<<
sitewaerts GmbH
Hebelstraße 15
D-76133 Karlsruhe
Tel: +49 (721) 920 918 0
Fax: +49 (721) 920 918 29
http://www.sitewaerts.de
>>>>>>>>>>>>>>>>>>>>>>>>>>>
More information about the jdom-interest
mailing list