Проверка 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>
Надеюсь, это поможет,