XStream:具有属性和文本节点的节点?

时间:2009-11-13 03:02:55

标签: java xml xstream

我想使用XStream将对象序列化为此表单的XML。

<node att="value">text</node>

节点( text )的值是序列化对象上的字段,以及 att 属性。如果没有为这个对象编写转换器,这可能吗?

谢谢!

4 个答案:

答案 0 :(得分:17)

您可以使用预定义的转换器。

@XStreamAlias("node")
@XStreamConverter(value=ToAttributedValueConverter.class, strings={"text"})
class Node {
  private String att;
  private String text;
}   

XStream Annotations Tutorial也说 att 属性:

  

请注意,不需要XStreamAsAttribute注释。该   转换器隐含地假定它。

答案 1 :(得分:7)

编写转换器,它应该类似于代码片段

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 :(得分:0)

这在JAXB中更容易

@XmlRootElement
public class Node {

    @XmlAttribute
    String att;

    @XmlValue
    String value;    

}

答案 3 :(得分:0)

另一种方法:

   @XStreamAlias("My")
   private static class My {
      private String field;
   }

   XStream xStream = new XStream();
   xStream.autodetectAnnotations(true);
   xStream.useAttributeFor(My.class, "field");