XStream: node с атрибутами и текстом node?
Я хотел бы сериализовать объект в XML этой формы с помощью XStream.
<node att="value">text</node>
Значение node (текст) - это поле на сериализованном объекте, а также атрибут att. Возможно ли это без написания конвертера для этого объекта?
Спасибо!
Ответы
Ответ 1
напишите конвертер, это должно быть что-то похожее на фрагмент кода
class FieldDtoConvertor implements Converter {
@SuppressWarnings("unchecked")
public boolean canConvert(final Class clazz) {
return clazz.equals(FieldDto.class);
}
public void marshal(final Object value,
final HierarchicalStreamWriter writer,
final MarshallingContext context) {
final FieldDto fieldDto = (FieldDto) value;
writer.addAttribute(fieldDto.getAttributeName(), fieldDto.getAttributeValue());
}
}
И при использовании XStream зарегистрируйте конвертер
final XStream stream = new XStream(new DomDriver());
stream.registerConverter(new FieldDtoConvertor());
Ответ 2
вы можете использовать предопределенный конвертер.
@XStreamAlias("node")
@XStreamConverter(value=ToAttributedValueConverter.class, strings={"text"})
class Node {
private String att;
private String text;
}
Учебное пособие XStream Annotations также говорит, что для атрибута att:
Обратите внимание, что аннотации XStreamAsAttribute не нужны. конвертер предполагает это неявно.
Ответ 3
Это намного проще в JAXB
@XmlRootElement
public class Node {
@XmlAttribute
String att;
@XmlValue
String value;
}
Ответ 4
Еще один способ сделать это:
@XStreamAlias("My")
private static class My {
private String field;
}
XStream xStream = new XStream();
xStream.autodetectAnnotations(true);
xStream.useAttributeFor(My.class, "field");