我有一个应用程序,使用JAXB从/向XML数据库读取和写入数据。 "人类可读性"这些XML文件是这个项目的首要任务之一,因为我们的想法是来自不同数据库的XML文件可以相互比较。
现在,我有一些带有属性的表,这些属性本身包含XML字符串,需要包含在我的JAXB对象中。由于我无法控制这些XML字符串并且可读性是关键,因此我迄今为止使用XmlAdapter
帮助自己从数据库中打印XML并将其包装在CDATA元素中。
此解决方案的问题在于CDATA元素中的XML字符串看起来有点丢失,而语法突出显示的智能文本编辑器无法识别XML,因此他们不会突出显示该XML的语法。
我想知道是否有办法去嵌入"这个XML在我的JAXB模型的一个元素中,好像它将成为模型的一部分。所以,我需要一种XmlAdapter
来解析我的JAXB类的String字段中的XML,并以某种方式将解析事件传递给底层的XMLWriter。
我花了很多时间寻找一个结合JAXB和Stax的解决方案,但没有成功。在我看来,我需要在JAXB和Stax层之间完全挂钩,以便我可以自定义JAXB发送给Stax Writer的事件。
示例:
@XmlRootElement
public class MyJaxbModel {
@XmlAttribute
private Integer anAttribute;
@XmlElement
private String xml;
public MyJaxbModel(Integer anAttribute, String xml) {
this.anAttribute = anAttribute;
this.xml = xml;
}
...
}
然后编组此类的以下实例
new MyJaxbModel(999, "<?xml version=\"1.0\" encoding=\"UTF-8\"?><element1><child1>bla</child1><child2>ble</child2></element1>");
应该产生以下XML:
<?xml version="1.0" encoding="UTF-8"?>
<MyJaxbModel anAttribute="999">
<xml>
<element1>
<child1>bla</child1>
<child2>ble</child2>
</element1>
</xml>
</MyJaxbModel>
显然我需要它也可以反过来工作,我。即解组这个XML会返回MyJaxbModel对象,包括xml字段中的XML字符串。