Проблема с проверкой XML - PullRequest
       32

Проблема с проверкой XML

3 голосов
/ 03 апреля 2012

Я пытаюсь проверить XML на соответствие XSD с помощью команды xmllint из Unix.Проблема, с которой я сталкиваюсь, заключается в следующем:

В XSD поле "state" определяется следующим образом:

  <xs:element name="state">
    <xs:simpleType>
      <xs:restriction base="xs:string">
        <xs:maxLength value="2"/>
      </xs:restriction>
    </xs:simpleType>
  </xs:element>

Обратите внимание на <xs:maxLength value="2"/>

И в XML поле состояния выглядит следующим образом:

TYPE 1:

        <state>
            FL
        </state>

ИЛИ

TYPE 2:

<state>FL</state>

Для ТИПА 1 я получаю следующую ошибку:

test.xml:243: element state: Schemas validity error : Element 'state': [facet 'maxLength'] The value has a length of '32'; this exceeds the allowed maximum length of '2'.
test.xml:243: element state: Schemas validity error : Element 'state': '
                FL
            ' is not a valid value of the local atomic type.

А для ТИПА 2 он корректно действует без каких-либо ошибок.

Итак, в основном, пробелы вФорматированный XML вызывает проблемы.Я хочу, чтобы XML прошел в обоих случаях.Есть ли способ сделать это с или без xmllint?

Большое спасибо.

1 Ответ

4 голосов
/ 03 апреля 2012

Попробуйте эту схему, QTAssistant проверяет ваш XML, я уверен, что ваш валидатор тоже должен:

<?xml version="1.0" encoding="utf-8" ?>
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="state">
        <xs:simpleType>
            <xs:restriction base="xs:string">
                <xs:whiteSpace value="collapse"/>
                <xs:maxLength value="2"/>
            </xs:restriction>
        </xs:simpleType>
    </xs:element>
</xs:schema>

Хитрость в предложении whiteSpace.

...