我有一个非常复杂的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个对象?
理想情况下,我会对使用此概念的编组和解组感兴趣!
答案 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.getElementsByTagName和Node.(get|set)TextContent。