Исключение типа содержимого для проверки xsd в элементах - PullRequest
2 голосов
/ 12 августа 2011

У меня есть элемент A, который может быть как простым, так и сложным, который создается динамически.

пример xml здесь:

 <A>john</A>

 <A>
    <B>kathy</B>
    <C> bat </C>
 </A>

мой xsd выглядит так:

        <xsd:element name="A">
                    <xsd:complexType>
                        <xsd:choice minOccurs="0" maxOccurs="unbounded">
                            <xsd:sequence>
                                <xsd:element name="B" minOccurs="0" maxOccurs="unbounded" />
                                <xsd:element name="C" minOccurs="0" maxOccurs="unbounded" />
                            </xsd:sequence>
                        </xsd:choice>
                    </xsd:complexType>
                </xsd:element>

Но здесь я сталкиваюсь с исключением, которое говорит:

Элемент 'A' не может иметь символ [children], потому что тип содержимого типа только для элемента

1 Ответ

7 голосов
/ 12 августа 2011

Вам необходимо указать смешанный контент в вашем типе:

<xsd:element name="A">
  <xs:complexType mixed="true">
   <xsd:choice minOccurs="0" maxOccurs="unbounded">
     <xsd:sequence>
       <xsd:element name="B" minOccurs="0" maxOccurs="unbounded" />
       <xsd:element name="C" minOccurs="0" maxOccurs="unbounded" />
     </xsd:sequence>
   </xsd:choice>
 </xsd:complexType>

Также это немного избыточно, имея последовательность внутри выбора.Вы либо хотите последовательность или нет.

Надеюсь, это поможет.

...