如何用Xstream省略标签?

时间:2014-08-27 10:32:34

标签: java xstream

我有一个这样的课程:

public class revision{
    long number;
    String comment;

    ... getters and setters
}

我想让xstream结果像这样:

<revision comment="value of comment">
  121556
</revision>

但是,由于number是字段,因此强制我将其写在<number>标记中。

我用它来构建xml:

XStream xstream = new XStream(new DomDriver("UTF-8"));
xstream.useAttributeFor(Revision.class, "comment");

是否有可能不显示标签?

1 个答案:

答案 0 :(得分:2)

您需要为revision课程注册ToAttributedValueConverter。此转换器允许您指定应该映射到元素的字符内容的类的单个属性,并且所有其他属性都映射到元素上的属性。最简单的方法是使用注释:

@XStreamConverter(value=ToAttributedValueConverter.class, strings={"number"})
public class revision {
  // class body as before
}

并告诉XStream实例使用

读取注释
xstream.processAnnotations(revision.class);

启用此转换器后, 需要useAttributeFor调用,因为转换器会自动使用number以外的所有属性。

如果您不想使用注释,那么您可以在XStream实例上使用方法调用来配置转换器,您只需从xstream中提取各种帮助程序并将其传递给显式构造函数(如果需要,注释处理器会自动将这些内容传递给转换器)

xstream.registerConverter(new ToAttributedValueConverter(
      revision.class, xstream.getMapper(), xstream.getReflectionProvider(),
      xstream.getConverterLookup(), "number"));