在JAXB对象中包含未知的XML snipets

时间:2017-08-25 21:48:31

标签: java xml jaxb adapter stax

我有一个应用程序,使用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字符串。

0 个答案:

没有答案