按照模式的要求在XML中插入标记

时间:2010-12-21 14:47:39

标签: java xml xsd sequence

我正在开发一个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。

1 个答案:

答案 0 :(得分:0)

我建议您使用JAXBXmlBeans。给定一个模式,JAXB编译器会为您生成相应的Java代码,以便解析XML或创建它。

我已经成功地将XmlBeans用于这些用例,它专门提供API来查询特定元素,属性等的存在。