Skip to Main Content

Java EE (Java Enterprise Edition) General Discussion

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

converting XML and XSL into HTML

843834May 28 2002 — edited Jun 2 2002
Hello!
I'm designing a servlet class that merges an xml file and xsl file into html that will be sent to the client. But I don't understand how the (sparsely documented) javax.xml.transform.dom package works. An exception is generated for a missing "version" tag, when I've included one that has worked on client-side xml/xsl pages before. If it matters, I'm using Apache Tomcat/JDK 1.4.

Here's the code:
package mypackage.servlet.xml;

import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.*;
import javax.xml.parsers.*;
import org.w3c.dom.*;
import org.xml.sax.*;

public class XML2HTMLServlet extends HttpServlet {
	public void doGet(HttpServletRequest request, HttpServletResponse response)
	 throws IOException, ServletException {

		response.setContentType("text/html");
		PrintWriter writer = response.getWriter();

		try {
			openFile("D:/Webdev/xml2html/data.xml", "D:/Webdev/xml2html/style.xsl", writer);
		} catch (Exception e) {
			e.printStackTrace(writer);
		}
	}

	private void openFile(String xmlPath, String xslPath, PrintWriter writer)
	 throws IOException, ParserConfigurationException, SAXException,
	 TransformerConfigurationException, TransformerException {
		File xmlFile = new File(xmlPath);
		File xslFile = new File(xslPath);

		TransformerFactory tFact = TransformerFactory.newInstance();

		DocumentBuilderFactory dbFact = DocumentBuilderFactory.newInstance();
		DocumentBuilder builder = dbFact.newDocumentBuilder();

		Document xmlDoc = builder.parse(xmlFile);
		Document xslDoc = builder.parse(xslFile);

		Node xmlDocNode = (Node)xmlDoc;
		Node xslDocNode = (Node)xslDoc;

		DOMSource xmlSrc = new DOMSource(xmlDocNode);
		DOMSource xslSrc = new DOMSource(xslDocNode);

		DOMResult htmlResult = new DOMResult();

		Transformer transformer = tFact.newTransformer(xslSrc);  // the exception occurs here!
	}
}
When it runs, it complains:
javax.xml.transform.TransformerConfigurationException:
javax.xml.transform.TransformerConfigurationException:
javax.xml.transform.TransformerException:
javax.xml.transform.TransformerException: stylesheet requires attribute: version at
org.apache.xalan.processor.TransformerFactoryImpl.newTransformer(TransformerFactoryImpl.java:767) at 
mypackage.servlet.xml.XML2HTMLServlet.openFile(XML2HTMLServlet.java:49) at 

...etc...etc...
data.xml contains:
<?xml version="1.0"?>

<document type="lecture">
	<title>Test Data</title>
	<section>
		<name>A New Section</name>
	</section>
</document>
style.xsl contains:
<?xml version="1.0"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
	<html>
		<head>
			<title><xsl:value-of select="document/title"/></title>
		</head>
		<body>
			<xsl:apply-templates select="document/section"/>
		</body>
	</html>
</xsl:template>

<xsl:template match="section">
	<div><i>Section</i><br/><xsl:value-of select="name"/></div>
</xsl:template>

</xsl:stylesheet>
I'm not sure the method calls above are what I want, so here's the client-side equivalent in Internet Explorer 5.0:
function createStyledXMLDocument(xmlUrl, xslUrl) {
	var xmlDocument = new ActiveXObject("Microsoft.XMLDOM");
	xmlDocument.load(xmlUrl);

	var xslDocument = new ActiveXObject("Microsoft.XMLDOM");
	xslDocument.load(xslUrl);

	return xmlDocument.transformNode(xslDocument);
}
Any help would be greatly appreciated.
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Jun 30 2002
Added on May 28 2002
2 comments
304 views