Значение отображения XStream между тегами в поле в теге-классе [duplicate]

Это работает для меня:

sudo apt-get install php5.6-curl
18
задан ChssPly76 13 November 2009 в 04:05
поделиться

4 ответа

напишите конвертор, это должно быть что-то похожее на фрагмент кода

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());
7
ответ дан Kiru 28 August 2018 в 08:41
поделиться
  • 1
    да, это похоже на то, что я сделал, но я добавил writer.setValue (fieldDto.getText ()), чтобы установить текст узла. – subb 13 November 2009 в 22:32
  • 2
    yes Subb, требуется установить значение узла, пропустить его в фрагменте – Kiru 15 November 2009 в 15:06

Это намного проще в JAXB

@XmlRootElement
public class Node {

    @XmlAttribute
    String att;

    @XmlValue
    String value;    

}
0
ответ дан Blaise Doughan 28 August 2018 в 08:41
поделиться

вы можете использовать предопределенный Конвертер.

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

Учебное пособие XStream Annotations также говорит, что для атрибута att :

Обратите внимание, что аннотации XStreamAsAttribute не нужны. Конвертер предполагает это неявно.

17
ответ дан facundofarias 28 August 2018 в 08:41
поделиться
  • 1
    я думаю, что это должен быть ответ – sunil 26 November 2014 в 07:18
  • 2
    +1 Это работало для меня, хотя это очень неинтуитивно. Должна быть аннотация @XStreamValue, подобная аннотации JAXB @XmlValue. – Asaph 16 September 2015 в 22:55

Еще один способ сделать это:

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

   XStream xStream = new XStream();
   xStream.autodetectAnnotations(true);
   xStream.useAttributeFor(My.class, "field");
0
ответ дан Thomas 28 August 2018 в 08:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: