2015-09-29 3 views
0

Вот фрагмент схемы:Извлечение simpletype перечисление из атрибута в XSD

</xs:schema> 
    <xs:attribute name="myFields"> 
     <xs:annotation> 
      <xs:documentation>Blah Blah Blah</xs:documentation> 
     </xs:annotation> 
    <xs:simpleType> 
     <xs:restriction base="xs:string"> 
      <xs:enumeration value="field_1"/> 
      <xs:enumeration value="field_2"/> 
      <xs:enumeration value="field_3_etc"/> 
     </xs:restriction> 
    </xs:simpleType> 
    </xs:attribute> 
</xs:schema> 

Как «получить у» simpleType? Я хочу, чтобы это как список строк идеально.

Пока все, что мне удалось сделать, это получить атрибут, потому что у него есть имя. Я не могу дать simpleType имя по какой-либо причине (только для элементов верхнего уровня разрешено имя, я думаю).

Вот что мой код в настоящее время выглядит следующим образом:

 var schemaSet = new XmlSchemaSet();   
     schemaSet.Add("", XMLPath + SchemaFileName); 
     schemaSet.Compile(); 


     var schema = schemaSet.Schemas().OfType<XmlSchema>().First(); 
     var attrs = schema.Items.OfType<XmlSchemaAttribute>() 
      .First(x => x.Name == "myFields"); 

ответ

0

Хорошо, я понял.

Мне нужно указать содержимое AttributeSchemaType как XmlSchemaSimpleTypeRestriction, а затем получить «Границы» этого.

var innerContentsOfRoot = (XmlSchemaSimpleTypeRestriction)attribute.AttributeSchemaType.Content; 
var strings = innerContentsOfRoot.Facets.OfType<XmlSchemaEnumerationFacet>().Select(d => d.Value); 
Смежные вопросы