Hello.
I'm trying to validate a XML file using schemas. The problem is that, when I validate it on a schema of which has another schema linked to it through <xs:include schemaLocation="AnotherSchema.xsd"/>
it won't validate. It's because it won't go through the linked schemas in the schema file.
I can easily validate a schema by using XmlResolver, but I can't find a way to validate a XML with resolver too.
This is easily done in .NET using the XmlValidatingReader class.
Any hints and thoughts are welcome too!
static void TestSchemaTwo(Args _args)
{
XMLReader xmlReader;
XmlSchema schema = XMLSchema::newFile(@'C:\XMLTest\xsd\services\Schema1.xsd');
XmlSchema tempSchema;
XmlSchemaObjectTable elementsTable;
XmlQualifiedName qName, schemaTypeQName;
XmlSchemaElement schemaElement;
XmlResolver resolver;
str targetNamespace;
XmlSchemaValidationError validationError;
XmlSchemaObjectEnumerator enum;
XmlSchemaElement element;
XmlReaderSettings readerSettings = new XmlReaderSettings();
;
new InteropPermission(InteropKind::ClrInterop).assert();
resolver = new XmlResolver();
resolver.allowFileAccess(true);
resolver.allowWebAccess(false);
resolver.baseUrlOverride(@"C:\XMLTest\xsd\services\");
schema.compile(resolver);
if(!schema.isCompiled())
info(schema.validationError().message());
readerSettings.xmlResolver(resolver);
xmlReader = XMLReader::newXml(@"C:\XMLTest\SomeXML.xml");
validationError = xmlReader.validate(schema.writeToString());
info(tempSchema.writeToString());
if (validationError)
info(validationError.message());
CodeAccessPermission::revertAssert();
xmlReader.close();
resolver = null;
schema = null;
}