java - JAXB 将 XML 片段映射为另一个 XML 文档中的片段

标签 java xml jaxb marshalling unmarshalling

使用 JAXB,是否有首选(或最佳)方法从文档中获取 XML 片段,然后将该片段包含在另一个文档中?从一种模式映射到另一种模式。有人可以引用该方法吗?我试图找到一些方法来做到这一点,但大多数搜索结果只是编码和解码。

我有多个 XML 源文档,其中包含我想要包含在辅助目标 XML 文档中的 XML 片段。目标片段看起来与源片段完全相同。源 XML 文档和目标 XML 文档的命名空间都不同,主要是因为相同标记的模式略有不同,但片段的定义相同,只是它位于父命名空间中(使用 JAXB 对象生成,我希望将每个命名空间的 Java 对象,因为不同数据的元素命名相同,并且在尝试对片段使用通用模式时存在一些问题)。

对于给定的 MyDoc 源 XML(见下文),我有一个子文档 XML 片段,我希望将其包含在 DestDoc 的目标 XML 的子文档列表中。 Attrib_1 在目标文档中命名相同,但内容类型不同。我正在尝试从 MyDoc 获取子文档,并将其包含在 DestDoc 内的子文档列表中,如下所示。由于 subdoc 是相同的 XML,因此我只需要从 mydoc/subdoc 转换为 destdoc/subdocs/subdoc。

由于我从 XML 开始,因此我可以解码到 MyDoc 对象并获取 subdoc 对象。此时,我可以将其编码为 XML 片段,尝试将其插入到正确位置的目标 XML 父元素中,然后解码为目标对象以添加其他内容或使用子文档映射器在 mydoc/subdoc 对象和 destdoc/subdoc 对象,但我将拥有一个依赖于这两个模式的对象。如果任何一个架构发生变化,那就是一个维护点。最终,在 DestDoc 的所有创建方面之后,我将编码为 XML 以输入到另一个流程。

我发现的一个常见示例是,如果名称 MyDoc 和 DestDoc 没有意义,请将 Bookstore 想象为 DestDoc,将子文档想象为书籍,将子文档想象为书籍,将 MyDoc 想象为 BookInfo。 Attrib_1 可能是 book_id,源和目标的值不同,而 attrib_6 可能是子文档的摘要计数。

源 XML:

<MyDoc xmlns="http://www.test.com/xsd/mydoc">
  <attrib_1>987</attrib_1>
  <attrib_2>bcd</attrib_2>
  <subdoc>
    <attrib_3>a1</attrib_3>
    <attrib_4>b1</attrib_4>
  </subdoc>
</MyDoc>

目标 XML:

<DestDoc xmlns="http://www.test.com/xsd/destdoc">
  <attrib_1>abc</attrib_1>
  <attrib_5>123</attrib_5>
  <attrib_6>456</attrib_6>
  <subdocs>
    <subdoc>
      <attrib_3>a1</attrib_3>
      <attrib_4>b1</attrib_4>
    </subdoc>
  </subdocs>
</DestDoc>

最佳答案

尝试编码到 DOM:

   DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
   dbf.setNamespaceAware(true);
   DocumentBuilder db = dbf.newDocumentBuilder();
   Document doc = db.newDocument();

   m.marshal(jaxbElement, doc);

然后使用老式的采用节点。

关于java - JAXB 将 XML 片段映射为另一个 XML 文档中的片段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20481188/

相关文章:

java - 可变日期类修复

java - JAXBElement.getValue() 返回 null

java - 更改方法名称会添加不需要的 XML block

java - JAXB - 编码/解码问题

java - 用于按浮点参数对对象数组列表进行排序的比较器

java - 使用 Java 客户端在 Apache YARN 上运行 MapReduce 应用程序

java - jgraphx:分层布局减少节点之间的距离

android - 在字符串名称 xml 文件中包含 @

xml - 属性组的选择

xml - Illustrator SVG 效果编码问题