Finds schema documents during load
.
var objXMLDOMSchemaCollection = objIXMLDOMDocument2.schemas; objXMLDOMDocument.schemas = objXMLDOMSchemaCollection;
The following script example attaches a schema to an XML document.
var xmldoc = new ActiveXObject("Msxml2.FreeThreadedDOMDocument.5.0"); var SchemaCache = new ActiveXObject("Msxml2.XMLSchemaCache.5.0"); xmldoc.async = false; xmldoc.validateOnParse = false; SchemaCache.add("x-schema:books", "c:\\books.xsd"); xmldoc.schemas = SchemaCache; // The document will load only if a valid schema is attached to the xml // file. xmldoc.load("c:\\books.xml"); if (xmlDoc.parseError.errorCode <> 0) { var myErr = xmlDoc.parseError; alert("You have error " + myErr.reason); } else { alert(xmldoc.xml) ; }
Set objXMLDOMSchemaCollection = objIXMLDOMDocument2.schemas objXMLDOMDocument.schemas = objXMLDOMSchemaCollection
HRESULT get_schemas (VARIANT* otherCollection); HRESULT putref_schemas (VARIANT otherCollection);
get_schemas
only)get_schemas
only)pSchemaCollection
is Null.IXMLSchemaCollection
interface cannot be obtained from SchemaCollection with formatted IErrorInfo
.Null if no schema collection is currently set. You will always get the same collection object you enter.
#include "stdio.h" #import <msxml5.dll> using namespace MSXML2; int checkParseError(IXMLDOMParseErrorPtr pError); void dump_com_error(_com_error &e); int main(int argc, char* argv[]) { CoInitialize(NULL); HRESULT hr; try{ IXMLDOMParseErrorPtr pError; //load the XSD file IXMLDOMDocumentPtr pXSDDoc; hr = pXSDDoc.CreateInstance(__uuidof(DOMDocument50)); pXSDDoc->async = VARIANT_FALSE; hr = pXSDDoc->load("c:\\temp\\bookschema.xdr"); //check on the parser error if(hr!=VARIANT_TRUE) { return checkParseError(pXSDDoc->parseError); } //create schemachache IXMLDOMSchemaCollectionPtr pSchemaCache; hr = pSchemaCache.CreateInstance(__uuidof(XMLSchemaCache50)); //add schema to schem cache hr = pSchemaCache->add("x-schema:books", pXSDDoc.GetInterfacePtr()); // load the XML file // ****** you need to use IXMLDOMDocument2 interface ********* IXMLDOMDocument2Ptr pXMLDoc; hr = pXMLDoc.CreateInstance(__uuidof(DOMDocument50)); pXMLDoc->validateOnParse = VARIANT_FALSE; pXMLDoc->async = VARIANT_FALSE; //associate xml doc with schemacache pXMLDoc->schemas = pSchemaCache.GetInterfacePtr(); // relative path works in debugger, modify it with absolute path as you need hr = pXMLDoc->load("c:\\temp\\booksample.xml"); //check on the parser error if(hr!=VARIANT_TRUE) { return checkParseError(pXMLDoc->parseError); } //call validate pError = pXMLDoc->validate(); if(pError->errorCode != S_OK) { _bstr_t parseError = _bstr_t("Error code: ")+ _bstr_t(pError->errorCode) +_bstr_t("\n") + _bstr_t("Reason: ")+ pError->Getreason(); MessageBox(NULL, (char*)parseError, "Parse Error",MB_OK); return -1; } else MessageBox(NULL,"Valiation succeeded", "Results",MB_OK); } catch(_com_error &e) { dump_com_error(e); } return 0; } int checkParseError(IXMLDOMParseErrorPtr pError) { _bstr_t parseError =_bstr_t("At line ")+ _bstr_t(pError->Getline()) + _bstr_t("\n")+ _bstr_t(pError->Getreason()); MessageBox(NULL,parseError, "Parse Error",MB_OK); return -1; } void dump_com_error(_com_error &e) { printf("Error\n"); printf("\a\tCode = %08lx\n", e.Error()); printf("\a\tCode meaning = %s", e.ErrorMessage()); _bstr_t bstrSource(e.Source()); _bstr_t bstrDescription(e.Description()); printf("\a\tSource = %s\n", (LPCSTR) bstrSource); printf("\a\tDescription = %s\n", (LPCSTR) bstrDescription); }
File Name: c:\temp\booksample.xml
<?xml version='1.0'?> <COLLECTION xmlns="x-schema:books" xmlns:dt="urn:schemas-microsoft-com:datatypes"> <DATE dt:dt="datetime">1998-10-13T15:56:00</DATE> <BOOK> <TITLE>Lover Birds</TITLE> <AUTHOR>Cynthia Randall</AUTHOR> <PUBLISHER>Lucerne Publishing</PUBLISHER> </BOOK> <BOOK> <TITLE>The Sundered Grail</TITLE> <AUTHOR>Eva Corets</AUTHOR> <PUBLISHER>Lucerne Publishing</PUBLISHER> </BOOK> <BOOK> <TITLE>Splish Splash</TITLE> <AUTHOR>Paula Thurman</AUTHOR> <PUBLISHER>Scootney</PUBLISHER> </BOOK> </COLLECTION>
File Name: c:\temp\bookschema.xdr
<?xml version="1.0"?> <Schema xmlns="urn:schemas-microsoft-com:xml-data"> <ElementType name="TITLE" /> <ElementType name="AUTHOR" /> <ElementType name="PUBLISHER" /> <ElementType name="DATE" /> <ElementType name="BOOK" model="closed"> <element type="TITLE" /> <element type="AUTHOR" /> <element type="PUBLISHER" /> </ElementType> <ElementType name="COLLECTION" model="closed"> <element type="BOOK" /> </ElementType> </Schema>
The schemas
property provides a way to associate preloaded schemas with any namespace. Set the schemas
property before loading the document to identify which schemas are used by the document. The schemas
property provides a way to override the existing schemas that are used by the document. Setting a new schema collection has no effect on the current document until the next load
, loadXML
, or validate
call. The schemas loaded by the document during load
are not added automatically to this collection.
Setting any non-Null schema collection automatically disables document type definition (DTD) processing because you cannot use both DTD and XML schema processing on the same document. This means DTDs will be ignored. Setting the schemas collection to Null reenables DTD processing.
To view reference information for Visual Basic, C/C++, or Script only, click the Language Filter button in the upper-left corner of the page.
IXMLDOMSchemaCollection/XMLSchemaCache | load Method | loadXML Method | validate Method
Applies to: IXMLDOMDocument2