XmlField supports XML namespaces. You can easily create objects mixing data from different namespaces, or you can use one object per namespace.
Starting from the following XML file :
<a:entry xmlns:a="http://www.w3.org/2005/Atom" xmlns="http://www.w3.org/1999/xhtml" > <a:title type="xhtml"> <div> <span class="name">CD Catalog</span> <span class="format">Atom</span> </div> </a:title> <a:id>12345</a:id> <a:updated>2003-12-14T18:30:02Z</a:updated> <a:author> <a:name>Author</a:name> </a:author> <a:content type="xhtml"> <div> <div class="cd"> <span class="title">01</span> <span class="price">999999</span> <span class="artist">QL0001</span> </div> </div> </a:content> </a:entry>
We just have to add the namespaces definitions and start using namespace prefixes in FieldXPath values :
AtomCatalog.java : @Namespaces({ "xmlns:a=http://www.w3.org/2005/Atom", "xmlns:x=http://www.w3.org/1999/xhtml" }) @ResourceXPath("/a:entry") public interface AtomCatalog { @FieldXPath("a:title/x:div/x:span[@class='name']") String getName(); @FieldXPath("a:content/x:div/x:div[@class='cd']") AtomCd[] getCd(); AtomCd addToCd(); } AtomCd.java : @Namespaces({ "xmlns:a=http://www.w3.org/2005/Atom", "xmlns:x=http://www.w3.org/1999/xhtml" }) @ResourceXPath("x:div[@class='cd']") public interface AtomCd { @FieldXPath("x:span[@class='title']") String getTitle(); void setTitle(String t); @FieldXPath("x:span[@class='price']") float getPrice(); void setPrice(float price); }
Then simply use XmlField as you would normally do :
String xmlContent="<a:entry xmlns:a="http://www.w3.org/2005/Atom" xmlns="http://www.w3.org/1999/xhtml" >(...)</a:entity>"; XmlField xf = new XmlField(); AtomCatalog catalog = xf.xmlToObject( xmlContent, AtomCatalog.class ); System.out.println (catalog.getName()); AtomCd cd = db.addToCd(); cd.setTitle("My new cd"); String result = xf.objectToXml(catalog);