[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


Hi,

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="/">    
    <Minimal/>        
</xsl:template>
</xsl:stylesheet>

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

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

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

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?

Regards,
Daniel
-- 
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