我正在尝试使用<xs:any />
节点构建一个模式。当我进行验证时,它表明插入的子节点没有定义。我认为any
允许我有未定义的子节点。
我的模式:
<xs:schema xmlns="Policy" targetNamespace="Policy" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Request">
<xs:complexType>
<xs:sequence>
<xs:any />
</xs:sequence>
<xs:attribute name="Routing" type="xs:string" />
</xs:complexType>
</xs:element>
</xs:schema>
我的XML:
<gp:Request Routing="foo" xmlns:gp="Policy">
<bar/>
</gp:Request>
它标记bar
节点。我做错了什么?
您看到了xs:any/@processContents="strict"
的预期行为,这是默认值。当@processContents
设置为strict
时,元素定义必须存在,并且XML中的元素必须对该声明有效。
更改为
<xs:any processContents="lax" />
如果您希望仅在元素定义存在的情况下进行验证,或者
<xs:any processContents="skip" />
如果希望,则无论XSD中是否定义了元素,都不会进行验证。
另请参阅
- processContents strict vs lax vs skip for xsd:any