XStream:具有属性和文本节点的节点?
Posted
技术标签:
【中文标题】XStream:具有属性和文本节点的节点?【英文标题】:XStream : node with attributes and text node? 【发布时间】:2010-12-16 03:50:09 【问题描述】:我想用 XStream 将一个对象序列化为这种形式的 XML。
<node att="value">text</node>
节点的值(text)是序列化对象上的一个字段,以及att属性。如果不为此对象编写转换器,这可能吗?
谢谢!
【问题讨论】:
【参考方案1】:您可以使用预定义的转换器。
@XStreamAlias("node")
@XStreamConverter(value=ToAttributedValueConverter.class, strings="text")
class Node
private String att;
private String text;
XStream Annotations Tutorial 也表示 att 属性:
注意,不需要 XStreamAsAttribute 注释。这 转换器隐含地假定它。
【讨论】:
我认为这应该是答案 +1 这对我有用,尽管这非常不直观。应该有一个类似于 JAXB 的@XmlValue
注释的 @XStreamValue
注释。【参考方案2】:
写一个转换器,应该是类似sn-p的代码
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());
【讨论】:
是的,这看起来像我所做的,但我添加了 writer.setValue(fieldDto.getText()) 来设置节点的文本。 yes subb,需要设置节点值,sn -p中漏掉了 看看下面的@mantrid 答案。这是更简单的出路。【参考方案3】:这在 JAXB 中要容易得多
@XmlRootElement
public class Node
@XmlAttribute
String att;
@XmlValue
String value;
【讨论】:
查看我的比较 JAXB 和 XStream 的博文:bdoughan.blogspot.com/2010/10/… 问题是关于 XStream,而不是 JAXB。【参考方案4】:只是另一种方式:
@XStreamAlias("My")
private static class My
private String field;
XStream xStream = new XStream();
xStream.autodetectAnnotations(true);
xStream.useAttributeFor(My.class, "field");
【讨论】:
以上是关于XStream:具有属性和文本节点的节点?的主要内容,如果未能解决你的问题,请参考以下文章
xStream javaBean转为xml时,怎么保留空节点