XmlSchemaDatatype::ParseValue Method (String^, XmlNameTable^, IXmlNamespaceResolver^)
When overridden in a derived class, validates the string specified against a built-in or user-defined simple type.
Assembly: System.Xml (in System.Xml.dll)
public: virtual Object^ ParseValue( String^ s, XmlNameTable^ nameTable, IXmlNamespaceResolver^ nsmgr ) abstract
Parameters
- s
-
Type:
System::String^
The string to validate against the simple type.
- nameTable
-
Type:
System.Xml::XmlNameTable^
The XmlNameTable to use for atomization while parsing the string if this XmlSchemaDatatype object represents the xs:NCName type.
- nsmgr
-
Type:
System.Xml::IXmlNamespaceResolver^
The IXmlNamespaceResolver object to use while parsing the string if this XmlSchemaDatatype object represents the xs:QName type.
Return Value
Type: System::Object^An Object that can be cast safely to the type returned by the ValueType property.
| Exception | Condition |
|---|---|
| XmlSchemaValidationException | The input value is not a valid instance of this W3C XML Schema type. |
| ArgumentNullException | The value to parse cannot be null. |
The ParseValue method validates the string specified against a built-in or user-defined simple type. For example, if this XmlSchemaDatatype represents the type xs:date, then an instance of DateTime is returned.
The following are the steps performed during the ParseValue method's validation process.
Convert the value specified as a string to its corresponding Common Language Runtime (CLR) type.
Verify that the value does not violate any facets defined for the simple type.
The converted value is then returned as an Object and can be cast safely to the type returned by the ValueType property.
When the XmlSchemaDatatype object represents a list type, the input string value is converted to a list of one or more objects. When the XmlSchemaDatatype object represents a list type, an attempt is made to parse the input value as a member type of the union. If the parse attempt fails, then the conversion is attempted with the next member of the union until the parse is successful or there are no other member types to parse. If the parse is unsuccessful, an exception is thrown.
The following example retrieves the LotteryNumber simple type from the example.xsd file as an XmlSchemaSimpleType and then validates the string value of 5 using the ParseValue method.
#using <mscorlib.dll> #using <System.Xml.dll> using namespace System; using namespace System::Xml; using namespace System::Xml::Schema; class XmlSchemaExamples { public: static void Main() { XmlTextReader^ xtr = gcnew XmlTextReader("example.xsd"); XmlSchema^ schema = XmlSchema::Read(xtr, gcnew ValidationEventHandler(ValidationCallbackOne)); XmlSchemaSet^ schemaSet = gcnew XmlSchemaSet(); schemaSet->ValidationEventHandler += gcnew ValidationEventHandler(ValidationCallbackOne); schemaSet->Add(schema); schemaSet->Compile(); XmlSchema^ compiledSchema; for each (XmlSchema^ schema1 in schemaSet->Schemas()) { compiledSchema = schema1; } for each (XmlSchemaObject^ schemaObject in compiledSchema->Items) { if (schemaObject->GetType() == XmlSchemaSimpleType::typeid) { XmlSchemaSimpleType^ simpleType = dynamic_cast<XmlSchemaSimpleType^>(schemaObject); Console::WriteLine("{0} {1}", simpleType->Name, simpleType->Datatype->ValueType); } if (schemaObject->GetType() == XmlSchemaComplexType::typeid) { XmlSchemaComplexType^ complexType = dynamic_cast<XmlSchemaComplexType^>(schemaObject); Console::WriteLine("{0} {1}", complexType->Name, complexType->Datatype->ValueType); } } xtr->Close(); } static void ValidationCallbackOne(Object^ sender, ValidationEventArgs^ args) { Console::WriteLine(args->Message); } }; int main() { XmlSchemaExamples::Main(); return 0; };
The following XML file is used for the preceding code example.
<?xml version="1.0"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:simpleType name="LotteryNumber"> <xs:restriction base="xs:int"> <xs:minInclusive value="1"/> <xs:maxInclusive value="99"/> </xs:restriction> </xs:simpleType> </xs:schema>
Available since 2.0