我正在使用JAXB 2.0处理XML文档,其中我需要映射到Java对象的信息(在我的示例中为'id')并运行一些业务逻辑。这里一切都很好。
但是这些XML文档总是包含大约500个节点的集合,我只想以原始xml格式保存到数据库中,所以我只对String形式的XML感兴趣。在我看来,将这些节点解组为Java对象并稍后再将它们编组为XML以将它们保存到数据库中是没有意义的。
有没有办法注释一个属性并使它只是将整个XML节点保存为String?这是该课程的当前版本:
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Parent {
@XmlElement(name = "id")
public long id;
@XmlElement(name = "child", type = String.class)
@XmlElementWrapper(name = "children")
public List<String> children = new ArrayList<String>();
}
解组XML文档后,children.size()返回正确的childran数,但它们仍为null。
XML文档如下所示:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<parent>
<id>45</id>
<children>
<child>
<name>Crash Dummy</name>
<age>21</age>
</child>
<child>
<name>Rockstar Programmer</name>
<age>12</age>
</child>
</children>
</parent>
提前感谢每一个提示或可能的解决方案。
答案 0 :(得分:2)
不,JAXB不允许这样的事情(我也不知道任何其他基于树的XML API)。
我不相信解析整个文档的开销会很糟糕。毕竟,无论如何都需要解析文档,以便找出静态节点树的起始位置和结束位置。将节点树存储为JAXB节点并不比在大型blob中存储节点树更糟糕。
如果表现真的对你很重要,我会建议两种选择: