2009-02-11 3 views
0

У меня проблема с xsd-схемой. У меня есть следующая схема определена:Проверка xsd схемы

<xs:element name="nodes" type="nodesRootType" /> 

<xs:complexType name="nodesRootType"> 
    <xs:sequence minOccurs="1" maxOccurs="unbounded"> 
     <xs:element name="node" type="nodeType" /> 
    </xs:sequence> 
</xs:complexType> 

<xs:complexType name="nodeType"> 
    <xs:sequence minOccurs="0" maxOccurs="unbounded"> 
     <xs:element name="node" type="nodeType" /> 
    </xs:sequence> 
    <xs:attribute name="name" type="xs:string" use="required" /> 
</xs:complexType> 

и я тестирую его на следующий XML:

<label name="Label_6" > 
    <label name="Label_7" /> 
</label> 
<label name="Label_8" /> 

Ошибка я получаю:

cvc-complex-type.2.4.a: Invalid content 
    was found starting with element 'node'. One of '{node}' is expected. 

Что же я missign здесь. Любая помощь приветствуется.

Беста, Юзеф

+0

Возможно, вы захотите отредактировать свой вопрос, я не вижу схему или XML. –

+0

Я обновил свой ответ. Я могу правильно сериализовать XML формы, которую вы хотите. Для исправления есть две части: 1) перемещение maxOccurs и minOccurs в правильное местоположение и 2) определение элемента отдельно в одном месте, поэтому он явно один и тот же тип в обоих расположениях схемы. – Eddie

ответ

3

Единый XML документ, который вы проверка не может иметь несколько корней. Он должен иметь один корень. Ваш XML:

<label name="Label_6"> 
    <label name="Label_7"/> 
</label> 
<label name="Label_8"/> 

имеет два корня, потому что есть два «label» элементы как на корневом уровне. Кроме того, ваша схема не определяет какой-либо элемент с именем «label», поэтому я смущен. Вы, вероятно, хотите схему, которая будет что-то вроде проверки следующий XML:

<labels> 
    <label name="Label_6"> 
     <label name="Label_7"/> 
    </label> 
    <label name="Label_8"/> 
</labels> 

где здесь у вас есть один корень «labels». Обратите внимание, что у вас есть элементы с тем же именем, «label» на разных уровнях иерархии. Это не verboten (см., Например, xhtml, где вы можете иметь div внутри div внутри ...), но это может ввести в заблуждение. Для примера XML, показанного выше, попробуйте схему, например:

<xs:element name="labels"> 
    <xs:complexType> 
    <xs:sequence> 
     <xs:element ref="label" minOccurs="1" maxOccurs="unbounded"/> 
    </xs:sequence> 
    </xs:complexType> 
</xs:element> 

<xs:complexType name="labelType"> 
    <xs:sequence> 
    <xs:element ref="label" minOccurs="0" maxOccurs="unbounded"/> 
    </xs:sequence> 
    <xs:attribute name="name" type="xs:string" use="required"/> 
</xs:complexType> 

<xs:element name="label" type="labelType"/> 
+0

Да, я вырезал пример xml из контекста. Простите за это. Вы правы, я хочу точно проверить, что вы написали. Вы сказали, что у меня нет элемента «label» в схеме. Можете ли вы представить пример схемы для xml, указанный выше? Большое спасибо. – 2009-02-11 17:58:24

+0

Он бросает ту же ошибку. Я обнаружил, что если я заменил с в «рекурсивном» комплексе. Определение типа, это работает. Я просто не знаю, почему это так ... – 2009-02-11 18:19:05

+0

Я нашел вашу проблему. У вас есть minOccurs и maxOccurs в неправильном месте. Проверьте мое редактирование выше. С этой схемой и образцом XML я могу правильно сериализовать и десериализовать. – Eddie

Смежные вопросы