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