<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META content="text/html; charset=iso-8859-1" http-equiv=Content-Type>
<META content="MSHTML 5.00.2014.210" name=GENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=#ffffff>
<DIV><FONT size=2><FONT face=Arial>Hi All</FONT></FONT></DIV>
<DIV><FONT size=2><FONT face=Arial></FONT></FONT>&nbsp;</DIV>
<DIV><FONT size=2><FONT face=Arial>I have a suite of Java classes for working 
with</FONT><FONT face=Arial>&nbsp;well formed XML in memory. The idea is to 
enable applets running in browsers access to XML based data. I am currently 
passing data to applets in XMLObject form, I am also using these classes for the 
middleware layer in fairly large business critical applications. 
</FONT></FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>Why re-invent the wheel? Well t<FONT face=Arial 
size=2>he .Jar file is 25k zipped. 30k unzipped.&nbsp;The raw class files run to 
about&nbsp;65k, I have not tried to compress or optimise this yet. Any 
exceptions still print debug style messages to assist in fixing any problems. 
Compared to the 'full monty' applications from IBM and Microsoft' I reckon thats 
good enough reason. </FONT></FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>The classes provide the following functionality - 
</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>create a new empty XmlObject</FONT></DIV>
<DIV><FONT face=Arial size=2>create an XmlObject from a string. ( or text file 
)</FONT></DIV>
<DIV><FONT face=Arial size=2>get the value of an attribute</FONT></DIV>
<DIV><FONT face=Arial size=2>set the value of an attribute</FONT></DIV>
<DIV><FONT face=Arial size=2>insert an attribute or node</FONT></DIV>
<DIV><FONT face=Arial size=2>remove an attribute or node</FONT></DIV>
<DIV><FONT face=Arial size=2>insert a copy of an XmlObject into another 
XmlObject</FONT></DIV>
<DIV><FONT face=Arial size=2>copy the XmlObject or a subsection of the 
XmlObject</FONT></DIV>
<DIV><FONT face=Arial size=2>build a cursor on a list of attributes at a certain 
level in the XmlObject</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>nodes and leaves can be located using qualified 
names. (IE: get ("customer.address.postcode") )</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>Anyway that's the basics, there are a few more 
besides. Are there any souls out there interested in&nbsp; testing this lot 
before I let it loose on&nbsp;the general community? drop me a mail at <A 
href="mailto:ian@imolesworth.demon.co.uk">ian@imolesworth.demon.co.uk</A> and 
I'll mail you the files and some documentation.</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>Ian Molesworth<BR>Tango4 Consulting 
ltd</FONT></DIV>
<DIV><FONT face=Arial size=2>+44 (0) 411 378 562</FONT></DIV>
<DIV><FONT face=Arial size=2>+44 (0) 1892 852846</FONT></DIV>
<DIV><FONT face=Arial></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>Sample follows -</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>public static void main(java.lang.String[] args) 
{</FONT></DIV>
<DIV><FONT face=Arial size=2><BR>&nbsp;try<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;// To 
build an object from the test file uncomment the following line 
and<BR>&nbsp;&nbsp;// comment out the 4 after that<BR>//&nbsp;&nbsp;XmlObject 
theObject = XmlObject.createFromFile ("C:\\data\\testdata.xob");</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>&nbsp;&nbsp;String theString = 
"&lt;XmlStringUser&gt;&lt;UserId&gt;&nbsp;&nbsp;12345 &lt;/UserId&gt; 
&lt;UserName&gt; Ian Molesworth";<BR>&nbsp;&nbsp;theString &nbsp;&nbsp;+= 
"&lt;/UserName&gt; &lt;ProductList&gt; &lt;Product&gt; &lt;name&gt; Term life 
&lt;/name&gt; &lt;/Product&gt; 
&lt;Product&gt;";<BR>&nbsp;&nbsp;theString&nbsp;&nbsp;&nbsp;&nbsp; += 
"&lt;name&gt; dual life &lt;/name&gt; &lt;/Product&gt; &lt;Product&gt; 
&lt;name&gt; mortgage life &lt;/name&gt; 
&lt;/Product&gt;";<BR>&nbsp;&nbsp;theString&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
+= "&lt;Product&gt; &lt;name&gt; annuity &lt;/name&gt; &lt;/Product&gt; 
&lt;/ProductList&gt; &lt;/XmlStringUser&gt;";</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>// Uncomment the next two lines to see the sample 
string streamed out<BR>//&nbsp;&nbsp;System.out.println("A string that will 
become an XmlObject - 
");<BR>//&nbsp;&nbsp;System.out.println(theString);<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;XmlObject 
theObject = XmlObject.buildFromString (theString);</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>// Uncomment the next two lines to see the 
formatted XML Object after being built from the 
string<BR>//&nbsp;&nbsp;System.out.println("\nThe serialized &amp; formatted 
XmlObject - ");<BR>//&nbsp;&nbsp;System.out.println 
(theObject.asXml());</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>&nbsp;&nbsp;theObject.insert 
("Request","VerifyUser");<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;XmlObject 
Address = XmlObject.build ("Address");</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>&nbsp;&nbsp;Address.insert 
("PostCode");<BR>&nbsp;&nbsp;Address.insert 
("NameBer","31");<BR>&nbsp;&nbsp;&nbsp;Address.insert ("line4","East 
Sussex");<BR>&nbsp;&nbsp;theObject.insert (Address); </FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>&nbsp;&nbsp;&nbsp;&nbsp; theObject.set 
("Address.PostCode","TN6 3LW");</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>// Uncomment the next two lines to see the 
formatted XML Object after being having the additional bits 
added.<BR>//&nbsp;&nbsp;System.out.println("\nThe NEW serialized &amp; formatted 
XmlObject - ");<BR>//&nbsp;&nbsp; &nbsp;&nbsp;System.out.println 
(theObject.asXml());<BR>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<BR>&nbsp;&nbsp;if ( 
theObject.contains("UserId"))<BR>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;System.out.println 
( "UserId&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = " + 
theObject.get("UserId").asXml());<BR>&nbsp;&nbsp;&nbsp;System.out.println ( 
"User name&nbsp;&nbsp; = " + 
theObject.get("UserName").asXml());<BR>&nbsp;&nbsp;&nbsp;if ( 
theObject.contains("ProductList"))<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
System.out.println ("List of products - 
");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int n = 1;</FONT></DIV>
<DIV><FONT face=Arial size=2>&nbsp;&nbsp;&nbsp; // This bit&nbsp;pulls out a 
copy of the subsection ( class ) held under productlist 
<BR>&nbsp;&nbsp;&nbsp;&nbsp;XmlObject ListOfProducts = 
theObject.get("ProductList");</FONT></DIV>
<DIV><FONT face=Arial size=2>&nbsp;&nbsp;&nbsp; // build a cursor on 
the&nbsp;enclosed&nbsp;attributes<BR>&nbsp;&nbsp;&nbsp;&nbsp;XCursor cursor 
=&nbsp; new XCursor 
(ListOfProducts);<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;while 
(cursor.hasMoreElements())<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XmlObject 
listObject = 
(XmlObject)cursor.nextElement();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println 
(n++ + " " + listObject.get("name").asXml());<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} 
&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;else 
if ( 
theObject.contains("Product"))<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;System.out.println 
(theObject.get("Product.name").asXml());<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;<BR>&nbsp;catch 
( Throwable exception )<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;System.out.println 
("Exception........." + exception.getMessage());<BR>&nbsp;&nbsp;}</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>&nbsp;}</FONT></DIV>
<DIV>&nbsp;</DIV></BODY></HTML>