2014-08-27 2 views
2

У меня есть класс, как это:Как опустить тег с помощью Xstream?

public class revision{ 
    long number; 
    String comment; 

    ... getters and setters 
} 

, и я хочу, чтобы результат XStream дать выглядеть так:

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

Однако, поскольку число поле заставляет меня написать это в <number> тег.

Я использовал это, чтобы построить XML:

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

есть возможность не показывать тег?

ответ

2

Вам необходимо зарегистрироваться ToAttributedValueConverter для класса revision. Этот конвертер позволяет указать одно свойство класса, которое должно быть сопоставлено с содержимым символа элемента, а все остальные свойства сопоставляются с атрибутами элемента. Самый простой способ сделать это с аннотациями:

@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")); 
Смежные вопросы