Проверка XSD для значения тега не нуль

Мой XML это:

    <LineService>
        <LineSrId>SR_CP_JD_144084-1</LineSrId>
        <MSNumber/>
        <AccountNo>1320116817829261</AccountNo>
    </LineService>

И мой xsd:

<element name="LineService" maxOccurs="unbounded" minOccurs="1">
    <complexType>
        <sequence>
            <element type="string" name="LineSrId" maxOccurs="1" minOccurs="0" nillable="true"/>
            <element name="MSISDN" maxOccurs="1" minOccurs="0" nillable="true">
                <simpleType>
                    <restriction base="string">
                        <pattern value="\d{10,18}|"></pattern>
                    </restriction>
                </simpleType>
            </element>
            <element type="string" name="AccountNo" maxOccurs="1" minOccurs="0" nillable="true"/>
        </sequence>
    </complexType>
</element>

Я хочу проверить MS Number или Account No, может быть нулевым, но оба не должны быть нулевыми для запроса. По крайней мере, один из них должен быть не нулевым и иметь значения.

1 ответ

Вы ищете определение XSD, чтобы сделать <AccountNo> или же <MSNumber> или оба, но не действительные. Обычный способ сделать это - объединить <xs:choice>, <xs:sequence>и атрибут minOccurs. Обратите внимание, что в вашем xsd имя вашего элемента MSISDN, а в XML - MSNumber, я использую MSNumber, как и в вашем XML, вот мое решение:

<schema xmlns="http://www.w3.org/2001/XMLSchema">
...
<element name="AccountNo" type="string"/>
<element name="MSNumber">
    <simpleType>
        <restriction base="string">
            <pattern value="\d{10,18}|"></pattern>
        </restriction>
    </simpleType>
</element>
<element name="LineService" maxOccurs="unbounded" minOccurs="1">
    <complexType>
        <sequence>
            <element type="string" name="LineSrId" maxOccurs="1" minOccurs="0" nillable="true"/>
            <xs:choice>
                <xs:sequence>
                    <xs:element ref="MSNumber"/>
                    <xs:element ref="AccountNo" minOccurs="0"/>
                </xs:sequence>
                <xs:element ref="AccountNo"/>
            </xs:choice>            
        </sequence>
    </complexType>
</element>
...
</schema>

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

Другие вопросы по тегам