[jdom-interest] Doctype cannot be added after a root element

"Daniel Lévy" daniel.levy at gmx.ch
Wed Dec 17 14:42:09 PST 2008


I want to report through the following example what it seems to me a bug in JDOM 1.1 non considered yet. I found an old report in the archive, but there was no answer. 

Lets have the following stylesheet minimal.xsl:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="xml" doctype-system="minimal.dtd"/>        
<xsl:template match="/">    

Beeing the minimal.dtd:
<?xml version="1.0" encoding="UTF-8"?>

Then if we try to convert this minimal input document:
<?xml version="1.0"?>

by means of:
XSLTransformer transformer = new XSLTransformer("minimal.xsl");
			SAXBuilder builder = new SAXBuilder(false);
			Document in = builder.build(new File("minimal.xml"));

the following exception will be raised:
"Doctype cannot be added after a root element"

By debugging in the JDOM source, I have attained in the method SAXHandler.startDTD(name,publicID,systemID) the statement factory.addContent(document, factory.docType(name,publicID,systemID)). Now the document parameter contains a dummyroot, added at construction time. The exception is raised because of this dummy root.

I suggest to exclude somehow the dummy root from the check (added in Beta 10).

As a workaround, I have removed the doctype-system attribute from the stylesheet and added the DTD reference in a postprocessing. Any ideas for a workaround without removing the doctype-system attribute?

Sensationsangebot verlängert: GMX FreeDSL - Telefonanschluss + DSL 
für nur 16,37 Euro/mtl.!* http://dsl.gmx.de/?ac=OM.AD.PD003K1308T4569a

More information about the jdom-interest mailing list