2012-02-19 48 views
0

我正在使用简单模板语言为现有系统生成遗留系统的XML。这显然不理想,因为很难看到生成的XML的结构,它会遇到转义问题,并且很容易生成无效的XML。Java - 为遗留系统生成XML

对于任何理智的XML格式,我只需要Xstream或另一个Java XML序列化库,但是这个遗留系统有很多奇怪的规则,例如“如果该值小于10,该节点应该被排除”和“格式化在节点x中的日期取决于节点y的值“。还有其他奇怪的规则,但这应该足以实现这个想法。

正如我所说的,模板方法远非想法,但它务实且有效(有一些努力)。用这么多的格式化规则,有没有更好的方法来为遗留系统生成XML? XSL已经超越了我的想法,但在XSL中实现任何数量的逻辑都坦率地说不是很诱人。

回答

1

我不知道,如果这是你在找什么,但也许尝试XML绑定如JAXB ...

换句话说:你可以生成从XSD的架构一个类库,然后建立你的对象图在java代码中,然后在一次调用中将它序列化为xml。

2

基本上你在序列化过程中需要一些自定义逻辑。我猜测内存中的对象结构不是直接镜像在XML结构中的?替代品:

  1. 使用StAX并在对象内分布读写方法。
  2. 使用JAXB并插入自定义序列化。

甚至没有想到在java以外的任何东西中表达自定义逻辑,即某些“超级”框架。

+0

你得到它完全正确,Java类不映射一个到一个与XML格式,我肯定不会寻找一个超级框架:)尽管我并不太热衷于使用特定于序列化的注释来“污染”域模型,编写方法以及在应用程序内部用于其他目的的方法。 – Kimble 2012-02-19 22:10:51

+1

如果只有一种XML格式,那么在模型中添加读/写逻辑是okey的,保持面向对象的优先级。但是你会很乐意把逻辑放在读写器类中,然后,它们也是一样的,但是不同。 – ThomasRS 2012-02-19 22:28:40