Как я могу сделать неявным для узла, который не является коллекцией?

Я хочу преобразовать этот класс в 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));
Другие вопросы по тегам