如何阻止Simple将`class`属性写入XML文件?

时间:2017-10-01 16:27:19

标签: java xml xml-serialization

我正在使用Simple来读写第三方XML文件。阅读效果很好,但在编写集合时,库会在结果文件中添加额外的class属性,如下所示:

<translation class="java.util.Collections$UnmodifiableMap">
    <!-- stuff here-->
</translation>

我的架构不允许这些,我想要只有我明确放在那里的属性的普通标签,如下所示:

<translation>
    <!-- stuff here-->
</translation>

我如何告诉Simple停止编写这些内容并猜测它应该使用哪个集合,就像通常那样?

2 个答案:

答案 0 :(得分:0)

解决方案实际上是mentioned on project's page,您必须使用访问者。这很简单:

public class ClassAttributeRemoverVisitor implements Visitor {
    @Override
    public void read(Type type, NodeMap<InputNode> node) throws Exception {
        // Do nothing, framework will guess appropriate class on its own
    }

    @Override
    public void write(Type type, NodeMap<OutputNode> node) throws Exception {
        OutputNode element = node.getNode();
        element.getAttributes().remove("class");
    }
}

要使用此访问者,您必须向Persister的构造函数添加VisitorStrategy:

new Persister(new VisitorStrategy(new ClassAttributeRemoverVisitor()))

答案 1 :(得分:0)

您也可以使用这个简单的解决方法:

@Path("translation")
@ElementMap(inline=true)
Map translation;