Элемент XML и проверка XSD, которая содержит как атрибут, так и текст
Я пытаюсь понять, как структурировать мою проверку XSD, чтобы она правильно проверяла мой XML-файл.
Моя стихия languages
содержать элементы language
который содержит как текст, так и id
поле.
Мой валидатор говорит мне, что у меня: Validation Error: The element 'languages' has invalid child element 'language'.
Как правильно это структурировать? мне вообще нужно complexType
для меня language
элемент?
XSD
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="dataset">
<xsd:complexType>
<xsd:all>
<xsd:element name="languages">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="language">
<xsd:complexType mixed="true">
<xsd:simpleContent>
<xsd:extension base="xsd:string">
<xsd:attribute name="id" type="xsd:integer"/>
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:all>
</xsd:complexType>
</xsd:element>
</xsd:schema>
XML
<?xml version="1.0" encoding="ISO-8859-1"?>
<dataset>
<languages>
<language id="0">C</language>
<language id="1">C++</language>
</languages>
</dataset>
1 ответ
Решение
Следующий XSD проверит ваш XML:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="dataset">
<xs:complexType>
<xs:sequence>
<xs:element name="languages">
<xs:complexType>
<xs:sequence>
<xs:element name="language" maxOccurs="unbounded">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="id">
</xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Заметки:
- Сообщение об ошибке было связано с количеством элементов (
maxOccurs="unbounded"
). - Вы можете не хотеть
mixed="true"
еслиlanguage
Предполагается, что возможная разметка смешивается с текстом в его содержимом.