gpt4 book ai didi

c# - 如何检测 XSD 文件中的 SimpleType?

转载 作者:数据小太阳 更新时间:2023-10-29 02:28:17 28 4
gpt4 key购买 nike

我正在解析我的 XSD 文件。 (包括一些元素,complexTypes和simpleTypes)

我想通过类型属性检测它们中的每一个。

我的 XSD 文件有点像这样。

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="mainInfo">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="DocumentInfo" minOccurs="1" maxOccurs="1" />
<xsd:element ref="Prerequisite" minOccurs="1" maxOccurs="1" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<!-- Element of DocumentInfo -->
<xsd:element name="DocumentInfo">
<xsd:complexType>
<xsd:attribute name="Name" type="xsd:string" />
<xsd:attribute name="Description" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<!-- Element of Prerequisite -->
<xsd:element name="Prerequisite">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Type" type="Prerequisite.Type.type" minOccurs="1" maxOccurs="1" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:complexType name="Prerequisite.Type.type">
<xsd:attribute name="SystemType" type="SystemTypeEnum" />
</xsd:complexType>
<xsd:simpleType name="SystemTypeEnum">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="Linux" />
</xsd:restriction>
</xsd:simpleType>
</xsd:schema>

下面是我的示例代码

  // Add the customer schema to a new XmlSchemaSet and compile it.
// Any schema validation warnings and errors encountered reading or
// compiling the schema are handled by the ValidationEventHandler delegate.
XmlSchemaSet schemaSet = new XmlSchemaSet();
schemaSet.ValidationEventHandler += new ValidationEventHandler(ValidationCallback);
schemaSet.Add("http://www.w3.org/2001/XMLSchema", "D:\\TMP\\test.xsd");
schemaSet.Compile();

// Retrieve the compiled XmlSchema object from the XmlSchemaSet
// by iterating over the Schemas property.
XmlSchema customerSchema = null;
foreach (XmlSchema schema in schemaSet.Schemas())
{
customerSchema = schema;
}



foreach (XmlSchemaElement element in customerSchema.Elements.Values)
{
XmlSchemaComplexType complexType = element.ElementSchemaType as XmlSchemaComplexType;
// currently, i detect my ComplexType via the method below.
if (aSchemaType.TypeCode == XmlTypeCode.None)
{
// Insert some code to handle ComplexType obj
// Handle Elements of XSD File
foreach (XmlSchemaElement element in customerSchema.Elements.Values)
{
XmlSchemaComplexType complexType = element.ElementSchemaType as XmlSchemaComplexType;
Dictionary<string, object> aTempDict = new Dictionary<string,object>();

mainDict.Add(element.Name, aTempDict);
//Parse elements
parseElement(complexType, ref aTempDict);
break;
}
}

// i want to find a method to detect my SimpleTYpe
// a little like this way, but i don't want to compare the equal or not with some string value. (NO == "string", thanks.)
else if (attribute.AttributeSchemaType.TypeCode == ???)
// else if (Some other method to detect SimpleType in a XSD file)
{
// Insert some code to handle SimpleType obj
// Loop the XSD Node and find out all the SimpleTye objects(members and type values), then add them to the related sub Dictionary based on ComplexType elements **TYPE** defined.
}
}

如何检测属性的类型是SimpleType及其属性还是其他好的表达式?

最佳答案

如果您只是想解析模式,那么您应该看看 this code sample来自教程How Do I...Use the Xml Schema Object Model? . (我确实注意到限制没有完全实现——它没有获得限制基类型或任何方面。)

应用到您的代码示例会得到如下结果:

    // Add the customer schema to a new XmlSchemaSet and compile it.
// Any schema validation warnings and errors encountered reading or
// compiling the schema are handled by the ValidationEventHandler delegate.
XmlSchemaSet schemaSet = new XmlSchemaSet();
schemaSet.ValidationEventHandler += new ValidationEventHandler(ValidationCallback);
schemaSet.Add("http://www.w3.org/2001/XMLSchema", "D:\\TMP\\test.xsd");
schemaSet.Compile();

// Retrieve the compiled XmlSchema object from the XmlSchemaSet
// by iterating over the Schemas property.
XmlSchema customerSchema = null;
foreach (XmlSchema schema in schemaSet.Schemas())
{
customerSchema = schema;
}

// Iterate over all schema items
foreach (object item in xmlSchema.Items)
{
if (item is XmlSchemaAttribute)
{
}
else if (item is XmlSchemaComplexType)
{
}
else if (item is XmlSchemaSimpleType)
{
XmlSchemaSimpleType simpleType = item as XmlSchemaSimpleType;
Console.WriteLine("SimpleType found with name=" + simpleType.Name);
}
else if (item is XmlSchemaElement)
{
}
else if (item is XmlSchemaAnnotation)
{
}
else if (item is XmlSchemaAttributeGroup)
{
}
else if (item is XmlSchemaNotation)
{
}
else if (item is XmlSchemaGroup)
{
}
else
{
Console.WriteLine("Not Implemented.");
}
}

关于c# - 如何检测 XSD 文件中的 SimpleType?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1979345/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com