Ошибка проверки XSD с использованием выбора - PullRequest
1 голос
/ 11 августа 2011

Мне нужен элемент A или B или оба. Если я использую выбор, то он генерирует исключение. Элемент 'A' не может иметь символ [children], потому что тип содержимого типа только для элемента. Как добиться желаемого результата.

        <xsd:complexType>
        <xsd:sequence>
            <xsd:element name="A">
                <xsd:complexType>
                    <xsd:sequence>
                        <xsd:element name="C"/>
                    </xsd:sequence>
                </xsd:complexType>
            </xsd:element>
            <xsd:element name="B"/>
         </xsd:sequence>
       </xsd:complexType>

образец XML

         <start>
            <A>
                <C>hhg</C>
            </A>
        </start>
        <start>
            <A>
                <C>hhg</C>
            </A>
            <B>fgeg</B>
        </start>
        <start>
            <B>fergf</B>
        </start>

Ответы [ 2 ]

3 голосов
/ 11 августа 2011

Используйте minOccurs="0", например:

<xs:element name="A" minOccurs="0">
...
<xs:element name="B" minOccurs="0"/>

Для XML:

<root>
    <start>
        <A>
            <C>hhg</C>
        </A>
    </start>
    <start>
        <A>
            <C>hhg</C>
        </A>
        <B>fgeg</B>
    </start>
    <start>
        <B>fergf</B>
    </start>
</root>

Подходящий XSD должен быть:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="root">
        <xs:complexType>
            <xs:sequence>
                <xs:element maxOccurs="unbounded" name="start">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element minOccurs="0" name="A">
                                <xs:complexType>
                                    <xs:sequence>
                                        <xs:element name="C" type="xs:string" />
                                    </xs:sequence>
                                </xs:complexType>
                            </xs:element>
                            <xs:element minOccurs="0" name="B" type="xs:string" />
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>
1 голос
/ 11 августа 2011
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="test">
    <xs:choice>
        <xs:element name="A">
            <xs:complexType>
                <xs:sequence>
                    <xs:element name="C"/>
                </xs:sequence>
            </xs:complexType>
        </xs:element>
        <xs:element name="B"/>
    </xs:choice>
</xs:complexType>
</xs:schema>

Это подтверждено в Oxygen ...

...