I’m working on a XML Editor which gets all his information from the corresponding XSD file. To work with the XSD files I use the System.Xml.Schema Namespace (XmlSchema*). Because of an ‘xsi:type’ attribute in the XML I’ve to change the XmlSchemaType of an XmlSchemaElement. Until now I use in my code the ‘ElementSchemaType‘ property of ‘XmlSchemaElement’. The nice thing about it: it’s read only.
There is also in ‘XmlSchemaElement’ an ‘SchemaType‘ property which is not read only, but always null (yes, XmlSchema and XmlSchemaSet are compiled).
So how can I change the type of the ‘XmlSchemaElement’? Or, also the same question: What is the diffrence between this two porperties?
Some technical data: C#, .NET 3.5
The MSDN documentation is nearly the same for both:
SchemaType Documentation:
Gets or sets the type of the element. This can either be a complex type or a simple type.
ElementSchemaType Documentation:
Gets an XmlSchemaType object representing the type of the element based on the SchemaType or SchemaTypeName values of the element.
Ok, I found a (bad) solution with Reflection:
I did an analysis wit .NET Reflector and they have two properties which hold an ‘XmlSchemaType’. One, not read only, is for XML serialization (it has Xml* attributes) and the other one, which is read only, is as I think for post compile use – so it’s more or less ‘static’ information. The nice thing about this great design: You can’t cleanly read an XSD, change some parts and save it again. Ok, I don’t testet it, but this is what the Code tells me.
So here are the interesting source code parts of ‘XmlSchemaElement’: