JAVA/XML解析所有引用

2ledvvac  于 2023-05-05  发布在  Java
关注(0)|答案(1)|浏览(150)

我们正在使用一个包含许多ref的大型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>
nfs0ujit

nfs0ujit1#

我们最终使用XpathFactory查找所有具有ref属性的元素,并将其替换为具有匹配id属性的等效元素。解决方案有两个问题。
1.更改文档的结构会导致XSD验证或解组出现问题。这并不是这项工作的问题,因为我们正在使用数据并丢弃重构后的XML。
1.多个ref可以引用同一个id。对第一个匹配项使用replaceChild方法移动匹配的id元素。后续的引用将需要副本,否则原始元素将再次移动。

相关问题