【问题标题】:Store JAXB-Objects into multiple XML files将 JAXB 对象存储到多个 XML 文件中
【发布时间】:2014-10-26 21:26:33
【问题描述】:

情况

我得到了多个 XSD 文件 A.xsdB.xsdC.xsd,它们通过 XInclude 引用彼此的元素,使用 IDREFID 没有循环依赖。 A.xsd 是我在层次结构中的根文件。

使用 XJB 和绑定文件,我管理它从 XSD 生成一致的 Java 代码。

在成功创建 Java 对象 abc 后,我正试图将它们编组为 XML 文件。这就是我卡住的地方。

问题

当将a 编组到文件a.xml 中时,bc 将无处存储,a.xml 不包含对它们的引用。

如何成功存储所有对象和引用?

方法

我手头有以下方法,但它们不适合

  • 直接在我的a.xsd中包含bc的类型,而不是使用IDREF。不起作用,因为最后我想要多个 XML 文件。
  • 编写 Java 代码以浏览 a 对象并找到 bc 的所有实例。然后编组所有bs 和cs 并使用 XInclude 引用生成的文件。这似乎不合适,因为我不希望我的存储机制知道所有类的所有内部。我只想存储我的a,JAXB 编组应尽可能自行处理存储依赖项。

类似的问题和回答者

以下问题与这个问题有关,他们想要生成多个 XML 文件。但是它们都没有考虑 XSD 文件和 XJC 绑定文件中给出的信息,因此需要对生成的 java 代码进行操作、一些重要的编程开销和某种信息重复。

【问题讨论】:

    标签: java xml jaxb xsd


    【解决方案1】:

    @XmlID & @XmlIDREF 是为了便于在单个 XML 文档中引用。

    如果您有一个从多个 XML 模式生成的模型到多个包中,那么您需要确保创建 JAXBContext 以了解所有这些类。一种方法是在包名称的冒号分隔 String 上创建 JAXBContext

    JAXBContext.newInstance("com.example.pkg1:com.example.pkg2:com.example.pkg3");
    

    【讨论】:

    • 谢谢,但我已经这样做了,使用的是根类而不是包。现在我使用了这些包,引用的 ID 正确存储在 a 中,但引用的对象(即 bc)仍然没有存储在任何地方。我什至不知道如何正确指定它们的存储位置。
    • @Waog - 根类与包名不同。不过你可以使用ObjectFactory 类。
    • 很高兴知道。但这仍然没有解决我的实际问题,即引用的对象bc根本没有存储。
    • @Waog - 不确定您是否浏览过我链接到的 @XmlIDREF 示例?您需要确保所有对象都可以通过嵌套关系访问(即@XmlElement)。第一步是让它们出现在 XML 中,下一步是让它们被 vi IDREF 引用。
    • 是的,我浏览了这个例子。但该示例以包含在一个 XML 文件中的所有数据结束。我的问题是,如何将数据存储在多个 XML 文件中。在您的示例中,这将是包含 <employee id="3" name="Anne Jones"> ... 的第二个 XML 文件,应从您的第一个 XML 文件中正确引用。
    猜你喜欢
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-06
    • 2016-08-30
    • 2023-03-07
    • 1970-01-01
    相关资源
    最近更新 更多