我想用XStream將對象序列化爲這種形式的XML。XStream:具有屬性和文本節點的節點?
<node att="value">text</node>
節點(文本)的值是序列化的對象上的字段,以及所述ATT屬性。這可能沒有寫這個對象的轉換器?
謝謝!
我想用XStream將對象序列化爲這種形式的XML。XStream:具有屬性和文本節點的節點?
<node att="value">text</node>
節點(文本)的值是序列化的對象上的字段,以及所述ATT屬性。這可能沒有寫這個對象的轉換器?
謝謝!
寫一個轉換器,它應該是相似的代碼片斷
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());
這是JAXB
@XmlRootElement
public class Node {
@XmlAttribute
String att;
@XmlValue
String value;
}
容易得多
查看我的博客文章比較JAXB&XStream:http://bdoughan.blogspot.com/2010/10/how-does-jaxb-compare -to-xstream.html – 2010-10-07 18:49:01
您可以使用預定義的Converter。
@XStreamAlias("node")
@XStreamConverter(value=ToAttributedValueConverter.class, strings={"text"})
class Node {
private String att;
private String text;
}
XStream Annotations Tutorial也說,對ATT屬性:
注意,沒有XStreamAsAttribute註釋是必要的。 轉換器假定它隱含。
只是做的另一種方式:
@XStreamAlias("My")
private static class My {
private String field;
}
XStream xStream = new XStream();
xStream.autodetectAnnotations(true);
xStream.useAttributeFor(My.class, "field");
是的,這看起來像我做了什麼,但我添加了一個writer.setValue(fieldDto.getText())來設置節點文本。 – subb 2009-11-13 21:32:48
是Subb,它需要設置節點值,在代碼段中錯過了 – Kiru 2009-11-15 14:06:46