<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<META NAME="Generator" CONTENT="MS Exchange Server version 5.5.2654.45">
<TITLE>DTD-aware document building</TITLE>
</HEAD>
<BODY>

<P><FONT SIZE=2 FACE="Arial">Hi,</FONT>
</P>

<P><FONT SIZE=2 FACE="Arial">I couldnt find anything in the archives which answers the following question I have, hence the posting.</FONT>
</P>

<P><FONT SIZE=2 FACE="Arial">I have a DTD with a type defined as follows:</FONT>
<BR><FONT SIZE=2 FACE="Arial">&lt;!ELEMENT Router (id , type , routerId , routerName&nbsp; .... )</FONT>
</P>

<P><FONT SIZE=2 FACE="Arial">When I want to construct a brand new document of type Router, I do the following:</FONT>
<BR><FONT SIZE=2 FACE="Arial">doc = new Document(new Element(&quot;Router&quot;));</FONT>
</P>

<P><FONT SIZE=2 FACE="Arial">After which, I get values from the client for id, type, routerId etc. I may not get it in the order defined in the DTD.</FONT>
<BR><FONT SIZE=2 FACE="Arial">For eg: my generic method setRouterAttribute(String name, String value) would simply:</FONT>
<BR><FONT SIZE=2 FACE="Arial">Element child = new Element(name);</FONT>
<BR><FONT SIZE=2 FACE="Arial">child.setText(value);</FONT>
<BR><FONT SIZE=2 FACE="Arial">rootElement.addContent(child); // where rootElement is the root of the &quot;Router&quot; document I created</FONT>
</P>

<P><FONT SIZE=2 FACE="Arial">Depending on the order the client calls the setRouterAttribute() to set the id, type etc, that is the order in which</FONT>
<BR><FONT SIZE=2 FACE="Arial">the document would be created and if this doesnt match the DTD, the document would be invalid. I do not want to</FONT>
<BR><FONT SIZE=2 FACE="Arial">hard-code into my client the order in which the calls should be made, I'd much rather want the document builder to</FONT>
<BR><FONT SIZE=2 FACE="Arial">do that automatically, so that if I change the order of fields in the DTD, I dont need to change my client program also.</FONT></P>

<P><FONT SIZE=2 FACE="Arial">Is there any JDOM method, which when I add a child to a node, adds it in the<I> correct</I> position as defined by the DTD?</FONT>
</P>

<P><FONT SIZE=2 FACE="Arial">Before JDOM, I used a home grown tool which did that and which I found very convenient. However, from reading up on</FONT>
<BR><FONT SIZE=2 FACE="Arial">various Java&amp;XML tools, I get the impression I belong to (probably) a minority among XML users who think that DTD</FONT>
<BR><FONT SIZE=2 FACE="Arial">or schema aware document manipulation (as shown by the above example) is essential.</FONT>
</P>

<P><FONT SIZE=2 FACE="Arial">Any comments/clarifications?</FONT>
</P>

<P><FONT SIZE=2 FACE="Arial">Thanks,</FONT>
<BR><FONT SIZE=2 FACE="Arial">Proneel.</FONT>
<BR><FONT SIZE=2 FACE="Arial">proneel@dset.com</FONT>
</P>

</BODY>
</HTML>