2010-01-28 66 views
2

如何在cs中用xsd simpleType检索这些枚举类型?这是一个示例简单类型?如何用c#在简单的xsd元素中找到限制值#

<xs:simpleType name="PaymentType"> 
    <xs:restriction base="xs:string"> 
     <xs:enumeration value="Cash" /> 
     <xs:enumeration value="CreditCard" /> 
    </xs:restriction> 
</xs:simpleType> 

谢谢

回答

4

你可以看看使用的架构对象模型(SOM)在此代码:

using System; 
using System.Collections.Generic; 
using System.IO; 
using System.Linq; 
using System.Xml; 
using System.Xml.Schema; 

namespace Testing.Xml 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      // read the schema 
      XmlSchema schema; 
      using (var reader = new StreamReader(@"c:\path\to\schema.xsd")) 
      { 
       schema = XmlSchema.Read(reader, null); 
      } 

      // compile so that post-compilation information is available 
      XmlSchemaSet schemaSet = new XmlSchemaSet(); 
      schemaSet.Add(schema); 
      schemaSet.Compile(); 

      // update schema reference 
      schema = schemaSet.Schemas().Cast<XmlSchema>().First(); 

      var simpleTypes = schema.SchemaTypes.Values.OfType<XmlSchemaSimpleType>() 
               .Where(t => t.Content is XmlSchemaSimpleTypeRestriction); 

      foreach (var simpleType in simpleTypes) 
      { 
       var restriction = (XmlSchemaSimpleTypeRestriction) simpleType.Content; 
       var enumFacets = restriction.Facets.OfType<XmlSchemaEnumerationFacet>(); 

       if (enumFacets.Any()) 
       { 
        Console.WriteLine("" + simpleType.Name); 
        foreach (var facet in enumFacets) 
        { 
         Console.WriteLine(facet.Value); 
        } 
       } 
      } 
     } 
    } 
}

此代码只适用于简单的,名为类型,虽然 - 如果你有元素或包含匿名简单类型的属性,那么它会变得非常复杂,因为您必须遍历所有元素和属性才能找到具有枚举构面限制内容的简单类型。