禁用单个元素的XSD验证?

时间:2016-07-12 09:48:00

标签: java xml xsd xsd-validation xml-validation

我有一个XSD文件,其中包含一些元素

<xs:element name="BasicData">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="TTTeacherList" minOccurs="0"/>
                <xs:element ref="NonTeachingActivityList" minOccurs="0"/>
                <xs:element ref="TTStudentList" minOccurs="0"/>
            </xs:sequence>
        </xs:complexType>
</xs:element> 

<xs:element name="NonTeachingActivityList">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="NonTeachingActivity" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:complexType>
</xs:element>

<xs:element name="NonTeachingActivity">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="NTCode" type="String10"/>
                <xs:element name="Description" type="String100"/>
                <xs:element name="Type" type="MeetingType"/>
            </xs:sequence>
            <xs:attribute name="RefId" type="GUID" use="required"/>
        </xs:complexType>
</xs:element>

我想删除元素NonTeachingActivity的所有验证,无论它是否发生,它都将永远不会检查验证。我不会删除整个元素,只是忽略这个元素。

2 个答案:

答案 0 :(得分:3)

XSD没有直接支持您的要求,但这里有两个选项:

  1. 如果您不希望NonTeachingActivity的内容模型 经过验证,你可以腾出它,

    <xs:element name="NonTeachingActivity"/>
    

    然后它将被允许包含任何XML。

  2. 如果您希望NonTeachingActivity出现在内容模型中 其他元素不影响验证,你可以尝试 用

    替换对NonTeachingActivity的引用
    <xs:any processContents="skip" />
    

    并且,如果您没有创建解析模糊,那么这将是 允许任何元素出现在其位置。

  3. 选项#1,结合在任何地方使用NonTeachingActivity可选,可能最接近满足您的要求。

答案 1 :(得分:0)

可以使用&#34;任何&#34;标记:

<xs:element name="NonTeachingActivityList">
        <xs:complexType>
            <xs:sequence>
                <xs:any minOccurs="0"/>
            </xs:sequence>
        </xs:complexType>
</xs:element>