Java XStream:XStream 1.3.1中具有属性的节点和文本节点?
我想用XStream将一个对象序列化为这种形式的XMLJava XStream:XStream 1.3.1中具有属性的节点和文本节点?,java,xml,xstream,Java,Xml,Xstream,我想用XStream将一个对象序列化为这种形式的XML <node att="value">text</node> 它以一种简单的方式实现了我想要的功能,但在XStream 1.3.1中不可用 对于XStream的1.3.1版本,有没有更好的方法来解决这个问题?一些黑客可能会这样做。主要的idia是使用1.4.7中修改的到attributedValueConverter 将复制到AttributedValueConverter到您的软件包中 将useAttributeF
<node att="value">text</node>
它以一种简单的方式实现了我想要的功能,但在XStream 1.3.1中不可用
对于XStream的1.3.1版本,有没有更好的方法来解决这个问题?一些黑客可能会这样做。主要的idia是使用1.4.7中修改的
到attributedValueConverter
复制到AttributedValueConverter
到您的软件包中useAttributeForEnumApper
复制到您的软件包中替换为赋值转换器#字段相等
,如下所示:
private boolean fieldIsEqual(FastField field) {
return valueField.getName().equals(field.getName())
&& valueField.getDeclaringClass().getName()
.equals(field.getDeclaringClass().getName());
}
public UseAttributeForEnumMapper(Mapper wrapped) {
super(wrapped, null);
}
useAttributeForEnumApper
中替换构造函数,如下所示:
private boolean fieldIsEqual(FastField field) {
return valueField.getName().equals(field.getName())
&& valueField.getDeclaringClass().getName()
.equals(field.getDeclaringClass().getName());
}
public UseAttributeForEnumMapper(Mapper wrapped) {
super(wrapped, null);
}
@XStreamConverter
注释,因为ToAttributedValueConverter
具有需要一些额外信息的构造函数,如值字段。但是您可以交替使用XStream#registerConverter
。所以你的班级必须看起来像:
@XStreamAlias("node")
public class Node {
private String attr;
private String content;
public void setAttr(String attr) { this.attr = attr; }
public String getAttr() { return attr; }
public void setContent(String content) { this.content = content; }
public String getContent() { return content; }
}
下面是一个示例,演示如何为此转换器配置xstream:
public static void main(String[] args) {
final Node node = new Node();
node.setAttr("value");
node.setContent("text");
final XStream xstream = new XStream();
configureXStream(xstream);
final String xml = xstream.toXML(node);
System.out.println(xml);
final Node node2 = (Node) xstream.fromXML(xml);
System.out.println("attr: " + node2.getAttr());
System.out.println("content: " + node2.getContent());
}
private static void configureXStream(final XStream xstream) {
xstream.autodetectAnnotations(true);
final Mapper mapper = xstream.getMapper();
final ReflectionProvider reflectionProvider = xstream
.getReflectionProvider();
final ConverterLookup lookup = xstream.getConverterLookup();
final Converter converter = new ToAttributedValueConverter(Node.class,
mapper, reflectionProvider, lookup, "content");
xstream.registerConverter(converter);
}
此程序打印出:
<node attr="value">text</node>
attr: value
content: text
文本
属性:值
内容:文本