2016-07-05 2 views
3

У меня есть XSD и неправильный XML.Ошибка проверки XSD, когда обязательный элемент отсутствует из последовательности сложного типа

XSD имеет сложный тип с последовательностью элементов. Все эти элементы: обязательно. (XSD поддерживается сторонним лицом и не может быть изменен)

Неправильный XML отсутствует один элемент.

Когда я проверяю XML на XSD с использованием C#, ожидаемая ошибка - это «элемент« XXX »ожидается». Но на самом деле это также говорит мне, что «элемент имеет недопустимый дочерний элемент». Я не уверен, что мне делать.

Чтобы помочь вам понять, на мой вопрос, я покажу вам пример:

<!-- Incorrect XML --> 
<class> 
    <el1>222</el1> 
    <el3>222</el3> 
</class> 

<!-- XSD --> 
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="class"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element type="xs:short" name="el1" /> 
     <xs:element type="xs:short" name="el2" /> 
     <xs:element type="xs:short" name="el3"/> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 

Реальные, но неожиданные ошибки проверки являются чем-то, как показано ниже:

Элемент «класс» имеет недопустимый дочерний элемент 'el3'. Список ожидаемых элементов: 'el2'.

Ожидаемые ошибки:

Список возможных элементов ожидаемых: 'EL2.

+0

Я не рассматриваю эту ошибку как непредвиденную. Вывод ошибки сообщает вам, что он ударил элемент '', когда он действительно ожидал элемент ''. И с точки зрения проверки, она по-прежнему терпит неудачу, когда это нужно, просто с сообщением об ошибке, которого вы не ожидали. –

+0

Спасибо, Тим, я думаю, ты прав. – Charlie

ответ

1

Вы недопонимаете сообщение. Это не говорит, что el3 не может быть ребенком class. Это говорит о том, что el3недействителен в момент его возникновения в процессе разбора.

Другими словами, как уже говорилось,

Элемент 'класс' имеет недопустимый дочерний элемент 'EL3.

Правильно.

С другой стороны, как вы интерпретируете сообщение,

Элемента «класс» никогда не может иметь дочерний элемент 'EL3.

действительно был бы неправильным. Однако, поскольку на самом деле это не так, диагностическое сообщение прекрасное, как есть.

+0

Спасибо @kjhughes. Однако я не интерпретировал сообщение, как вы сказали. Я знаю сообщение. Элемент «class» имеет недопустимый дочерний элемент «el3»._ Верно, я просто надеюсь, что если есть какой-то шанс, я получаю только одно сообщение: _List возможных ожидаемых элементов: 'el2' ._ – Charlie

+0

Возможно, вы имели в виду * желаемый *, а не * ожидаемый * тогда. Тогда ответ на ваш вопрос: да, если вы хотите переопределить поведение обработчика ошибок по умолчанию, вы можете написать любое сообщение, которое хотите; честно говоря, я не вижу, чтобы это стоило усилий здесь. – kjhughes

+0

Да, я убедил своих коллег просто уйти, как есть. Кстати, как вы уже говорили, «вы можете написать любое сообщение, которое хотите» _, было бы здорово, если бы вы могли дать мне несколько намеков или ссылок, на которые я могу смотреть? – Charlie

Смежные вопросы