18

XStreamを使用して、オブジェクトをこの形式のXMLにシリアル化したいと思います。

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

ノードの値(text)は、シリアル化されたオブジェクトのフィールドであり、att属性でもあります。このオブジェクトのコンバーターを作成しなくても、これは可能ですか?

ありがとう!

4

4 に答える 4

19

事前定義されたコンバーターを使用できます。

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

XStream Annotations Tutorialには、att属性についても次のように書かれています。

XStreamAsAttributeアノテーションは必要ないことに注意してください。コンバーターはそれを暗黙的に想定します。

于 2012-01-20T13:08:27.570 に答える
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());
于 2009-11-13T06:36:43.833 に答える
0

これはJAXBでははるかに簡単です

@XmlRootElement
public class Node {

    @XmlAttribute
    String att;

    @XmlValue
    String value;    

}
于 2010-08-20T13:25:31.840 に答える
0

それを行うためのちょうど別の方法:

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

   XStream xStream = new XStream();
   xStream.autodetectAnnotations(true);
   xStream.useAttributeFor(My.class, "field");
于 2017-07-29T23:25:08.113 に答える