我有一个类似下面的XML文件
<transaction name="TEST_EX" type="singletonComplex">
<vo class="svc.vo.UserProfile">
<field deepMapping="true">
<vo class="svc.vo.UserVO">
<field name="UserName" column="User_Name" type="String"/>
<field name="Age" column="User_Age" type="Integer"/>
</vo>
</field>
<field name="Address1" column="Address_1" type="String"/>
<field name="Address2" column="Address_2" type="String"/>
</vo>
</transaction>
里面有几个字段。某些字段已将deepMapping设置为true。我想确保,如果启用了deepMapping,那么它应该首先列出,即。在Address1
和Address2
之前。我已经创建了一个XSD文件,但我不确定如何在该XSD文件中实现它。
答案 0 :(得分:2)
您不能使元素(或属性)的内容依赖于另一个元素的内容。 XML Schema不支持这一点。您将不得不在其上使用其他一些验证机制。
答案 1 :(得分:1)
您是否能够更改XML结构?如果是,我建议添加一个新的XML元素,用启用的deepMapping对所有字段进行分组,例如:
<transaction name="TEST_EX" type="singletonComplex">
<vo class="svc.vo.UserProfile">
<deepMapping>
<vo class="svc.vo.UserVO">
<field name="UserName" column="User_Name" type="String"/>
<field name="Age" column="User_Age" type="Integer"/>
</vo>
</deepMapping>
<field name="Address1" column="Address_1" type="String"/>
<field name="Address2" column="Address_2" type="String"/>
</vo>
</transaction>
您在顶部放置deepMapping =“true”的所有字段的请求或多或少是一组字段。
答案 2 :(得分:0)
正如xcut所说,你不能用XML Schema做到这一点。你可以做的是使用两个具有相同复杂类型的不同元素名称:
<xs:complexType name="fieldType">
<xs:sequence>
<xs:element name="field" maxOccurs="unbounded">
<!-- .... -->
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:element name="vo">
<xs:complexType>
<xs:sequence>
<xs:element name="deepMappedField" type="fieldType" minOccurs="0"/>
<xs:element name="field" type="fieldType" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>