#xml #xsd
#xml #xsd
Вопрос:
Я получаю ошибку проверки из следующего 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.
Что я упускаю?
Ответ №1:
Это говорит о том, что «Person» не может включать строку. Для проверки xml с помощью этого xsd используйте это :
<?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. Что мне нужно добавить в XSD, чтобы добавить строки в XML (под элементом Person)?
2. Отредактировал мой пост. Пожалуйста, проверьте.
Ответ №2:
Если XML указан правильно и вы хотите, чтобы XSD поддерживал строковое содержимое (с другими дочерними элементами или без них), вы можете просто добавить mixed=true
атрибут complexType:
<?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 является дочерним элементом, атрибут mixed не допускается!
Ответ №3:
Для меня ошибка была решена, когда я добавил элемент значения к сложному типу, который раньше имел только атрибут.