我解析我的XSD文件。 (包括一些元素,complexTypes和simpleTypes)如何檢測XSD文件中的SimpleType?
我想通過類型屬性檢測它們中的每一個。
我的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 2009-12-30 10:01:24
@Dadadistis,嗨,我重申了我的問題。 – 2009-12-30 10:09:50
愚蠢的問題,但你的XML解析器沒有一個「elementName」方法,你可以用它來確定元素的名稱,從而解決該元素被命名爲「simpleType」或「complexType」。我不是指訪問屬性名稱,而是實際的元素名稱。 – 2010-01-07 17:09:28