Я разбираю свой файл XSD. (включая некоторые элементы, complexTypes и simpleTypes)Как определить SimpleType в XSD-файле?
Я хочу определить каждый из них по свойству типа.
Мой 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 с имуществом оно или другим хорошим выражением?
Может вам перефразируйте вопрос? Я не уверен, что вы пытаетесь сделать. – Diadistis
@ Diadistis, Привет, я перефразировал свой вопрос. –
Тупой вопрос, но у вашего анализатора XML не есть метод «elementName», который вы могли бы использовать для определения имени элемента, тем самым разрешив, что этот элемент называется «simpleType» или «complexType». Я не имею в виду доступ к имени атрибута, но имя фактического элемента. –