2

我正在使用 JAXB 2.0 处理 XML 文档,我需要将信息(在我的示例中为“id”)映射到 Java 对象并运行一些业务逻辑。这里一切正常。

但是这些 XML 文档总是包含大约 500 个节点的集合,我只想以原始 xml 格式保存到数据库中,所以我只对字符串形式的 XML 感兴趣。在我看来,将这些节点解组为 Java 对象并稍后将它们再次编组为 XML 以将它们保存到数据库中是没有意义的。

有什么方法可以注释属性并使其仅将整个 XML 节点作为字符串保存?这是我当前版本的该课程:

@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() 返回正确数量的子项,但它们仍然为空。

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>

提前感谢每一个提示或可能的解决方案。

4

1 回答 1

2

不,JAXB 不允许这样的事情(我知道的任何其他基于树的 XML API 也不允许)。

我不相信解析整个文档的开销会那么糟糕。毕竟,无论如何都需要解析文档,以便找出静态节点树的起点和终点。将节点树存储为 JAXB 节点并不比将其存储在一个大块中差多少。

如果性能对您来说真的那么重要,我会建议两种选择:

  • 使用更快的 API 解析 XML 文档,例如 StAX(虽然使用低级 API 获得正确的解析器可能真的很困难)
  • 将数据存储为两个 XML 文件。一个包含您实际需要的数据,另一个包含您只需要随身携带的“静态”数据。根据您对最终文档的处理方式,也可以使用 XInclude 之类的东西。
于 2010-02-04T16:28:28.463 回答