JAVA/XML 解析所有 ref

问题描述 投票:0回答:1

我们正在使用一个包含许多引用的大型 XML 文档。使用 JAXB,我们成功地解组了文档。使用一种方法,我们传递节点以使用简单的三元运算符解析引用:

someElement = someElement.getRef() != null ? (someClass)someElement.getRef() : someElement;

我们还需要根据某些子元素生成PDF。使用 JAXB.marshal 我们将一个子节点输出到一个字符串,但是引用没有被解析并且我们丢失了内容。此外,上面的语句虽然简单,但却被执行了很多次,我们希望完全避免它。

有没有办法配置 JAXB 以在编组时解析此引用?或者有任何替代方法来预处理文档?

输入:

<Root>
  <Category>
    <SomeElement ref="someId" />
  </Category>
  <SomeElement id="someId">
    <ValuableContent>HelloWorld</ValuableContent>
  </SomeElement>
<Root>

期望:

<Root>
  <Category>
    <SomeElement>
      <ValuableContent>HelloWorld</ValuableContent>
    </SomeElement>
  </Category>
<Root>
java xml jaxb ref
1个回答
0
投票

我们最终使用 XpathFactory 查找所有具有 ref 属性的元素,并将这些元素替换为具有匹配 id 属性的等效元素。解决方案有 2 个问题。

  1. 更改文档的结构会导致 XSD 验证或解组出现问题。这不是这项工作的问题,因为我们正在使用数据并丢弃重构的 xml。
  2. 多个 ref 可以引用同一个 id 是可能的。对第一个匹配项使用 replaceChild 方法会移动匹配的 id 元素。随后的 ref 将需要副本,否则原始元素将再次移动。
© www.soinside.com 2019 - 2024. All rights reserved.