使用选项的XSD验证错误

时间:2011-08-11 11:28:03

标签: java xml validation xsd

我需要元素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 个答案:

答案 0 :(得分:3)

使用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 :(得分:1)

<?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>

这在氧气中已经过验证...