C# 如何使用c在简单的xsd元素中查找限制值#
如何使用c#在xsd simpleType上检索这些枚举类型?这是一个简单类型的示例C# 如何使用c在简单的xsd元素中查找限制值#,c#,xml,xsd,C#,Xml,Xsd,如何使用c#在xsd simpleType上检索这些枚举类型?这是一个简单类型的示例 <xs:simpleType name="PaymentType"> <xs:restriction base="xs:string"> <xs:enumeration value="Cash" /> <xs:enumeration value="CreditCard" /> </xs:restriction> &l
<xs:simpleType name="PaymentType">
<xs:restriction base="xs:string">
<xs:enumeration value="Cash" />
<xs:enumeration value="CreditCard" />
</xs:restriction>
</xs:simpleType>
谢谢您您可以在下面的代码中使用模式对象模型(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);
}
}
}
}
}
}
使用系统;
使用System.Collections.Generic;
使用System.IO;
使用System.Linq;
使用System.Xml;
使用System.Xml.Schema;
名称空间测试.Xml
{
班级计划
{
静态void Main(字符串[]参数)
{
//阅读模式
XmlSchema;
使用(var reader=newstreamreader(@“c:\path\to\schema.xsd”))
{
schema=XmlSchema.Read(reader,null);
}
//进行编译,以便可以获得编译后的信息
XmlSchemaSet schemaSet=新的XmlSchemaSet();
schemaSet.Add(schema);
schemaSet.Compile();
//更新架构引用
schema=schemaSet.Schemas().Cast().First();
var simpleType=schema.SchemaTypes.Values.OfType()
其中(t=>t.Content是XmlSchemaSimpleTypeRestriction);
foreach(simpleType中的var simpleType)
{
var restriction=(XmlSchemaSimpleTypeRestriction)simpleType.Content;
var enumFacets=restriction.Facets.OfType();
if(enumFacets.Any())
{
Console.WriteLine(“+simpleType.Name”);
foreach(枚举facets中的变量facet)
{
Console.WriteLine(facet.Value);
}
}
}
}
}
}
但是,这段代码只适用于命名的简单类型-如果您有包含匿名简单类型的元素或属性,那么它会变得更加复杂,因为您必须遍历所有元素和属性以查找包含枚举方面的限制内容的简单类型