2010-12-21 15 views
0

我正在开发一个JAVA项目,其中严格的XSD由第三方提供。 XSD包含以下结构:按照架构的要求在特定位置插入XML中的标记

<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> 

我有唯一的解决方案是复杂的,我必须寻找前述元素3(从最近的)的所有元素的存在。如果找到前面的元素,我会在它后面插入。如果没有找到,我插入父项。我需要将前面的元素存储在某处(配置或硬编码)。这似乎不是一个优雅的解决方案。

在Java中这样做的最好方法是什么?无论是在代码中还是使用XSLT。

回答

0

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

我已经成功地使用XmlBeans的这些类型的使用情况,并明确规定查询特定元素的存在的API,属性等

+0

我也考虑过这一点,但我dont't知道xml的编组/解组将改变原始的xml。 XSD非常复杂。借助XmlBeans,我最终可以完成140多个课程。似乎很多改变一个标签:) – Alan 2010-12-21 15:12:17