Simple Xml:使用重复元素序列化对象树

时间:2014-03-02 13:40:00

标签: java xml

我目前正在尝试使用简单的xml api(http://simple.sourceforge.net/)序列化具有重复元素的对象树。

以下是创建树的类:

@Root(name = "build", strict = false)
public class Build {

    @Element
    public Repository repository;

    @Element
    public Project project;

}

@Root
public class Project {

    @Element
    public Repository repository;
}

@Root
public class Repository {

    @Element
    public String url;

}

这是树:注意:Build和Project都引用相同的存储库(重复元素)。

Build build = new Build();
Project project = new Project();
Repository repository = new Repository();
repository.url = "http://my-repository.com";

build.project = project;
build.repository = repository;
project.repository = repository;

如果我在没有任何策略的情况下序列化树:

Persister persister = new Persister();
persister.write(build, new FileOutputStream(new File(
    "build-default-strategy.xml")));

然后我得到了

<build>
   <repository>
      <url>http://my-repository.com</url>
   </repository>
   <project>
      <repository>
         <url>http://my-repository.com</url>
      </repository>
   </project>
</build>

这不是我想要的,因为存储库也在xml中重复。

如果我使用循环策略,那我就更近了一步:

Strategy strategy = new CycleStrategy("id", "ref");
Persister persister = new Persister(strategy);
persister.write(build, new FileOutputStream(new File(
            "build-cycle-strategy.xml")));

输出:

<build id="0">
   <repository id="1">
      <url id="2">http://my-repository.com</url>
   </repository>
   <project id="3">
      <repository ref="1"/>
   </project>
</build>

这也不行,因为我还希望xml文件可以编辑。在这 case(例如,如果你添加一个新的存储库),那么你必须自己分配id, 这是不切实际的(“真正的”对象树要大得多)。

我想要的是一个xml文件,其中只给出了重复的元素 ID:

<build>
   <repository id="1">
      <url>http://my-repository.com</url>
   </repository>
   <project>
      <repository ref="1"/>
   </project>
</build>

如果你知道如何实现这一点,请帮助我。感谢。

注意:http://simple.sourceforge.net/download/stream/doc/tutorial/tutorial.php#reuse 是一个相关的例子。

0 个答案:

没有答案