import java.io.StringWriter;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
class Ideone {
AnotherContainer AnotherContainer;
}
static class AnotherContainer {
int value;
}
Document doc
= DocumentBuilderFactory.
newInstance().
newDocumentBuilder().
newDocument();
save(obj, obj.getClass().getSimpleName(), doc, doc);
return doc;
}
Class<?> objCls = obj.getClass();
Element elt
= doc.
createElement(name
); parent.appendChild(elt);
if (objCls.getCanonicalName().startsWith(Ideone.class.getSimpleName())) {
for (Field field
: objCls.
getDeclaredFields()) { Object value
= field.
get(obj
); if (value != null) {
save(value, field.getName(), elt, doc);
}
}
} else {
elt.setTextContent(obj.toString());
}
}
Element elt
= doc.
getDocumentElement(); E obj = cls.newInstance();
load(obj, elt);
return obj;
}
Class<?> cls = obj.getClass();
NodeList children = elt.getChildNodes();
for (int i = 0; i < children.getLength(); i++) {
if (children.item(i).getNodeType() == Node.ELEMENT_NODE) {
Field field
= cls.
getDeclaredField(childElt.
getTagName()); Class<?> childCls = field.getType();
if (childCls.getCanonicalName().startsWith(Ideone.class.getSimpleName())) {
Object childObj
= childCls.
newInstance(); field.set(obj, childObj);
load(childObj, childElt);
} else {
String value
= childElt.
getTextContent(); if (childCls
== String.
class) { field.set(obj, value);
} else {
childCls = toWrapper(childCls);
Method method
= childCls.
getMethod("valueOf",
String.
class); field.set(obj, method.invoke(null, value));
}
}
}
}
}
static Class<?> toWrapper(Class<?> cls) {
if (cls.isPrimitive()) {
} else if (Double.
TYPE == cls
) { }
}
return cls;
}
rootContainer.name = "root";
rootContainer.Container1.name = "root.c1";
rootContainer.Container2.name = "root.c2";
rootContainer.AnotherContainer = new AnotherContainer();
rootContainer.AnotherContainer.name = "root.c3";
rootContainer.AnotherContainer.value = 42;
rootContainer.Container2.AnotherContainer = new AnotherContainer();
rootContainer.Container2.AnotherContainer.name = "root.c2.c3";
rootContainer.Container2.AnotherContainer.value = 21;
TransformerFactory transformerFactory = TransformerFactory.newInstance();
transformerFactory.setAttribute("indent-number", 2);
Transformer transform = transformerFactory.newTransformer();
transform.setOutputProperty(OutputKeys.INDENT, "yes");
transform.transform(new DOMSource(doc), result);
String xml
= result.
getWriter().
toString();
System.
out.
println("Saved to xml:");
System.
out.
println(loadedContainer.
Container2.
AnotherContainer.
name); System.
out.
println(loadedContainer.
Container2.
AnotherContainer.
value); }
}