我正在开发一个JAVA项目,其中第三方提供了严格的XSD。 XSD包含以下结构:
<sequence>
<element name="element1" type="type1" nillable="true" minOccurs="0"/>
<element name="element2" type="type2" nillable="true" minOccurs="0"/>
<element name="element3" type="type3" nillable="true" minOccurs="0"/>
</sequence>
根据XSD,元素必须按此顺序排列。但是所有元素都不是强制性的,因此它们可能不在消息中。这里的列表是简化的,实际上更长。
如果我想检查传入消息中是否存在element3并且如果它不存在,我应该采取什么方法将其插入消息中的正确位置。我必须考虑缺少所有前面的元素,所以我不能依赖于element2的存在,并在其后插入标记。例如:
<parent>
<element2/>
</parent>
应该成为
<parent>
<element2/>
<element3/>
</parent>
我唯一的解决方案是复杂的解决方案,我必须在element3之前搜索所有元素的存在(从最近的开始)。如果找到前面的元素,我插入它后面。如果没有找到,我插入父母。我需要在某处存储前面的元素(配置或硬编码)。这似乎不是一个优雅的解决方案。
在Java中执行此操作的最佳方法是什么?在代码中或使用XSLT。