Java tutorial
import java.io.File; import javax.xml.bind.JAXBContext; import javax.xml.bind.Marshaller; import javax.xml.bind.Unmarshaller; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.adapters.XmlAdapter; import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; class BarAdapter extends XmlAdapter<Object, Bar> { private DocumentBuilder documentBuilder; public BarAdapter() { try { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); documentBuilder = dbf.newDocumentBuilder(); } catch (Exception e) { } } @Override public Bar unmarshal(Object v) throws Exception { Bar bar = new Bar(); Element element = (Element) v; bar.value = element.getTextContent(); return bar; } @Override public Object marshal(Bar v) throws Exception { Document document = documentBuilder.newDocument(); Element root = document.createElement("bar"); root.setTextContent(v.value); return root; } } @XmlRootElement @XmlAccessorType(XmlAccessType.FIELD) class Foo { @XmlJavaTypeAdapter(BarAdapter.class) private Bar bar; } @XmlAccessorType(XmlAccessType.FIELD) class Bar { String value; } public class Main { public static void main(String[] args) throws Exception { JAXBContext jc = JAXBContext.newInstance(Foo.class); Unmarshaller unmarshaller = jc.createUnmarshaller(); File xml = new File("data.xml"); Foo foo = (Foo) unmarshaller.unmarshal(xml); Marshaller marshaller = jc.createMarshaller(); marshaller.setAdapter(new BarAdapter()); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); marshaller.marshal(foo, System.out); } }