【问题标题】:How do I de-serialize an attribute and a text node using XStream?如何使用 XStream 反序列化属性和文本节点?
【发布时间】:2018-11-25 06:42:02
【问题描述】:

我想使用 XStream 反序列化以下 XML:

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

放入具有两个String 类型字段的Java 对象。我该怎么做?

我见过thesequestions,但我需要做的其实是反向操作。

【问题讨论】:

    标签: java xml xstream


    【解决方案1】:

    正如您发现的几个序列化示例中所暗示的,ToAttributedValueConverter 是最直接的方法。它允许您将类上的字段作为 XML 属性处理,其中一个作为 XML 主体。

    用这两个类来接收数据:

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

    这会正确反序列化:

        XStream xstream = new XStream();
        xstream.processAnnotations(Root.class);
    
        Root root = (Root) xstream.fromXML(xml);
    

    【讨论】: