Как проверить XML на отсутствие элементов с помощью XSD - PullRequest
0 голосов
/ 29 июня 2011

Значение по умолчанию для minOccurs свойства <element> в XSD-файле: 1 (источник) .

Предположим, у вас есть XSD, указывающий сложный тип, содержащий 2 элемента: <el1> и <el2>.
Если вы предоставите XDocument, содержащий только <el2>, XDocument не будет подтвержден.
Вместо этого вы получите сообщение:

The element Message in namespace ___ has invalid child element el2 in namespace ___.
List of possible elements expected: el1

Это в основном ошибка на <el2>, где можно ожидать ошибки в сложном типе, если она не содержит <el1>.

Мой вопрос:
Есть ли способ проверить наличие всех тегов <element> с minOccurs> 0?
Я бы сказал, что это очень простая проверка при проверке XML с помощью XSD.

1 Ответ

2 голосов
/ 29 июня 2011

В зависимости от того, как вы определили свою схему, порядок появления элементов будет иметь значение.

В этом случае валидатор ожидает , но видит элемент , поэтому ошибка в том, что появляется там, где не должен. Я полагаю, это означает, что вы использовали «последовательность» при определении вашего сложного типа. Так что ошибка, которую вы при получении верна.

Если это все еще беспокоит вас, и порядок элементов не имеет значения для вашего анализа, используйте «all» вместо «sequence», которое не будет обеспечивать порядок. Затем валидатор должен сообщить вам, что обязательный элемент отсутствует. Это должно выглядеть примерно так:

<xsd:complexType name="MyType">
  <xsd:all>
    <xsd:element name="el1" minOccurs="1"/>
    <xsd:element name="el2" minOccurs="1"/>
  </xsd:all>
</xsd:complexType>

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

...