2014-10-07 2 views
0

У меня есть следующая схема Xml.Показать список возможных допустимых значений элемента xml

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:simpleType name="type"> 
    <xs:restriction base="xs:string"> 
     <xs:enumeration value="Type 1" /> 
     <xs:enumeration value="Type 2" /> 
     <xs:enumeration value="Type 3" /> 
    </xs:restriction> 
    </xs:simpleType> 
    <xs:element name="Root"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="Element_1"> 
      <xs:complexType> 
      <xs:sequence> 
       <xs:element name="TypeName" type="type" /> 
      </xs:sequence> 
      </xs:complexType> 
     </xs:element> 
     <xs:element name="Element_2"> 
      <xs:complexType> 
      <xs:sequence> 
       <xs:element name="TypeName" type="type" /> 
      </xs:sequence> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 

Я проверка следующий XML против приведенной выше схеме.

<?xml version="1.0" encoding="utf-8"?> 
<Root> 
    <Element_1> 
     <TypeName>Type 4</TypeName> 
    </Element_1> 
    <Element_3> 
     <TypeName>Type 2</TypeName> 
    </Element_3> 
</Root> 

Я ожидаю ошибку проверки, и я получаю один: Элемент «TYPENAME» недействительно - Значение «Тип 4» является недействительным в соответствии с его типом данных «типа» - Перечисление ограничений не удалось. Элемент 'Root' имеет недопустимый дочерний элемент 'Element_3'. Ожидается список возможных элементов: «Element_2».

В сообщении об ошибке четко отображаются недопустимые элементы (Element_3), а также отображается список возможных допустимых элементов (Element_2). Можно ли отобразить действительный список 'TypeName'.

Теперь я хочу получить сообщение об ошибке, подобное приведенному ниже: Элемент 'TypeName' недействителен. Значение 'Тип 4' недопустимо в соответствии с типом его типа. Список ожидаемых значений: «Тип 1, тип 2» - Ошибка перечисления. Элемент 'Root' имеет недопустимый дочерний элемент 'Element_3'. Ожидается список возможных элементов: «Element_2».

Возможно ли получить выше сообщение об ошибке (или подобное). Имеются ли какие-либо другие ограничения, кроме Xs: перечисление, все допустимые значения?

+1

Какую цепочку инструментов XML/XSD вы используете? (Нет стандартов, которые перечисляют, как сообщаются ошибки проверки, каждый инструмент имеет свой собственный путь.) – Richard

+0

Если я правильно понял, вы спрашиваете, какой инструмент я использую. Я использую Visual Studio 2012. – lerner1225

+0

IIRC VS имеет возможности редактирования XML и XSLT, но сам по себе не является XSD-валидатором. ISTR использует поддержку .NET XSD, которая не дает вам контроля над выводами сообщений об ошибках. Вы можете использовать типы в ['System.Xml.Schema'] (http://msdn.microsoft.com/en-us/library/system.xml.schema%28v=vs.110%29.aspx), но я не уверен, что они достаточно подробны, чтобы получить возможные значения, заданные целевым элементом. Мне было бы интересно узнать, как вы поживаете ... – Richard

ответ

0

@Richard: Спасибо за информацию.

Не удалось найти решение, но создать обходное решение.

private static void ValidationCallBack(object sender, ValidationEventArgs e) 
{ 
    if (e.Exception != null && e.Exception.InnerException != null) 
    { 
     if (e.Exception.InnerException.Message == "The Enumeration constraint failed.") 
     { 
      if (((XElement)sender).Name == "TypeName") 
      { 
       Console.WriteLine("Error, valid Enums are Type 1, Type 2, Type 3..."); 
      } 
     } 
    } 
    else 
    { 
     Console.WriteLine("Error."); 
    } 
} 
Смежные вопросы