'' не является допустимым значением атомарного типа 'xs:integer'

avatar
PTK
9 августа 2021 в 06:14
656
2
0

xml может содержать элемент с целочисленным типом данных, который также может быть пустым. я получаю сообщение об ошибке '' is not a valid value of the atomic type 'xs:integer'

Есть ли способ указать только минимальную длину для этого элемента или что-то вроде значения этого элемента является необязательным в xsd?

Источник

Ответы (2)

avatar
JLRishe
9 августа 2021 в 08:22
1

Майкл Кей предложил два возможных решения, но третий (и в некотором смысле более простой) вариант — указать элемент как nillable. Если он недействителен, вы можете оставить его пустым и указать его как ноль, используя xsi:nil="true".

Однако, если у вас нет никакого контроля над XML, так что вы можете включить xsi:nil, вам нужно будет воспользоваться одним из предложений Майкла Кея.

Схема:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:element name="n">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element ref="count" minOccurs="0"/>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
    <xsd:element name="count" type="xsd:integer" nillable="true" />
</xsd:schema>

XML:

<n xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <count xsi:nil="true" />
</n>
Michael Kay
11 августа 2021 в 20:06
0

Я никогда не видел веских причин для использования xsi:nil. Это так некрасиво!

avatar
Michael Kay
9 августа 2021 в 08:11
1

Есть два подхода:

(a) определить тип объединения, который допускает либо целое число, либо строку нулевой длины

(b) определить тип списка с типом элемента xs:integer, с minLength=0 и maxLength=1.

Оба эквивалентны с точки зрения проверки. (а) встречается чаще, но, на мой взгляд, (б) проще. Скорее всего, они дадут разные результаты, если вы выполняете ввод данных со схемой, а не только проверку, например, если вы используете XSLT или XQuery с поддержкой схемы или привязку данных в стиле JAXP.