展平JaxB对象

时间:2015-12-03 20:30:52

标签: jaxb xjc

我有一个非常复杂的xml结构,如此

<root>
 <a>
   <b>
      <c>testc</c> 
      <e>teste</e>
   <b>
   <d>testd</d>
 </a>
...
</root>

有超过100个节点。节点很简单,没有属性。我正在使用xjc(JaxB绑定编译器)从xsd文件生成POJO对象。但是因为xsd有树结构,xjc正在生成100个对象。

我可以展平xjc生成的输出,并且只有一个具有所有属性的对象:

class Root {
 private String c;
 private String e;
 private String d;
 ...
}

而不是100个对象?

理想情况下,我会对使用此概念的编组和解组感兴趣!

1 个答案:

答案 0 :(得分:0)

some documentation on cyclic references,但我无法告诉您XML是否存在问题。

您可以使用平面Root方法,但是您无法通过忽略容器标记来重现原始结构。 您可以配置很多,甚至编写自己的片段(de)序列化器,但在某个时候,当尝试将XML树插入单节点JAXB POJO时,它会变得太复杂。

据我所知,您只对能够使用文本内容编辑单字母标记的值感兴趣。也许您可以通过使用XSLT将源文档转换为将1对1映射到POJO的文档来简化界面,但您还必须编写反向XSLT。

另一种方法是简单地将XML加载到通用DOM中,并使用XPath(如//a/text())来访问可编辑节点。您可能已经在使用属性的getter和setter,因此您可以让他们调用private getText( String tagName )private setText( String tagName, String value)来直接读取和修改DOM。这些功能只需使用Document.getElementsByTagNameNode.(get|set)TextContent