从XSD

时间:2015-09-29 15:36:27

标签: xml enums xsd attributes simpletype

以下是架构的片段:

</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>

我如何&#34;到达&#34; 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");

1 个答案:

答案 0 :(得分:0)

好的,我明白了。

我需要将AttributeSchemaType内容强制转换为XmlSchemaSimpleTypeRestriction,然后获取其中的“Facets”。

 var innerContentsOfRoot = (XmlSchemaSimpleTypeRestriction)attribute.AttributeSchemaType.Content;
 var strings = innerContentsOfRoot.Facets.OfType<XmlSchemaEnumerationFacet>().Select(d => d.Value);