Как я могу сделать неявным для узла, который не является коллекцией?
Я хочу преобразовать этот класс в XML-файл этого типа. Что я должен сделать, чтобы удалить узел <с>
? Как я могу сделать неявным для узла, который не является коллекцией?
Джава:
public class root {
int a;
int b;
int d;
}
XML:
<root>
<a>123</a>
<b>345</b>
<c>
<d>567</d>
</c>
</root>
1 ответ
Вы можете попробовать использовать конвертер для этого. Создайте класс, реализующий com.thoughtworks.xstream.converters.Converter, и переопределите его методы маршала и демаршала: добавление ужасного примера, который служит цели.
class SimpleConverter implements Converter{
@Override
public void marshal(Object o, HierarchicalStreamWriter writer, MarshallingContext marshallingContext) {
Root i = (Root) o;
writer.startNode("a");
writer.setValue(String.valueOf(i.a));
writer.endNode();
writer.startNode("b");
writer.setValue(String.valueOf(i.b));
writer.endNode();
writer.startNode("c");
writer.startNode("d");
writer.setValue(String.valueOf(i.d));
writer.endNode();
writer.endNode();
}
@Override
public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext unmarshallingContext) {
Root root = new Root();
reader.moveDown();
root.a = Integer.valueOf(reader.getValue());
reader.moveUp();
reader.moveDown();
root.b = Integer.valueOf(reader.getValue());
reader.moveUp();
reader.moveDown();
reader.moveDown();
root.d = Integer.valueOf(reader.getValue());
reader.moveUp();
reader.moveUp();
return root;
}
@Override
public boolean canConvert(Class aClass) {
return aClass.equals(Root.class);
}
}
class Root {
public int a;
public int b;
public int d;
}
Используйте это так:
Root root = new Root();
root.a = 1;
root.b = 2;
root.d = 3;
XStream xStream = new XStream();
xStream.registerConverter(new SimpleConverter());
System.out.println(xStream.toXML(root));
Root root1 = (Root) xStream.fromXML(xStream.toXML(root));