我从以下XSD收到验证错误:
<?xml version="1.0" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="People">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Person" maxOccurs="unbounded">
<xsd:complexType>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
使用以下XML进行验证时:
<?xml version="1.0" ?>
<People>
<Person name='john'>
a nice person
</Person>
<Person name='sarah'>
a very nice person
</Person>
<Person name='chris'>
the nicest person in the world
</Person>
</People>
返回以下错误:
lxml.etree.XMLSyntaxError: Element 'Person': Character content is not allowed, because the content type is empty.
我错过了什么?
答案 0 :(得分:14)
它说“人”不能包含字符串。要使用xsd验证xml,请使用:
<?xml version="1.0" ?>
<People>
<Person name='john'>
</Person>
<Person name='sarah'>
</Person>
<Person name='chris'>
</Person>
</People>
尝试使用xsd进行验证:
<?xml version="1.0" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="People">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Person" type="Person" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:complexType name="Person">
<xsd:simpleContent>
<xsd:extension base="xsd:string">
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
</xsd:schema>
答案 1 :(得分:1)
对我来说,当我将value元素添加到以前只有属性的复杂类型中时,错误已解决。
答案 2 :(得分:0)
如果XML是正确的,并且您希望XSD支持字符串内容(带有或不带有其他子元素),则只需在complexType上添加mixed=true
属性:
<?xml version="1.0" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="People">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Person" maxOccurs="unbounded">
<xsd:complexType mixed="true">
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
mixed
属性:
指定是否允许在该complexType元素的子元素之间出现字符数据。默认为false。如果simpleContent元素是子元素,则不允许混合属性!