schemas Property
Finds schema documents during load
.
Script Syntax
var objXMLDOMSchemaCollection = objIXMLDOMDocument2.schemas;
objXMLDOMDocument.schemas = objXMLDOMSchemaCollection;
Example
The following script example attaches a schema to an XML document.
var xmldoc = new ActiveXObject("Msxml2.FreeThreadedDOMDocument.3.0");
var SchemaCache = new ActiveXObject("Msxml2.XMLSchemaCache.3.0");
xmldoc.async = false;
xmldoc.validateOnParse = false;
SchemaCache.add("", "bookschema.xdr");
xmldoc.schemas = SchemaCache;
// The document will load only if a valid schema is attached to the xml
// file.
xmldoc.load("books.xml");
if (xmldoc.parseError.errorCode != 0) {
var myErr = xmldoc.parseError;
WScript.Echo("You have error " + myErr.reason);
} else {
WScript.Echo(xmldoc.xml) ;
}
Visual Basic Syntax
Set objXMLDOMSchemaCollection = objIXMLDOMDocument2.schemas
objXMLDOMDocument.schemas = objXMLDOMSchemaCollection
C/C++ Syntax
HRESULT get_schemas (VARIANT* otherCollection);
HRESULT putref_schemas (VARIANT otherCollection);
Parameters
otherCollection
[out, retval][in]
The schema collection that is returned. This is the same object that was previously set, or Null if none has been set.
C/C++ Return Values
S_OK
The value returned if the method executes successfully and a schema collection is set.
S_FALSE (for get_schemas
only)
The value returned if no schema collection is set.
E_POINTER (for get_schemas
only)
The value returned if pSchemaCollection
is Null.
E_FAIL (for putref_schemas only)
The value returned if an 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.
Example
The following example works with MSXML 3.0. It uses XDR schemas, which are not supported in MSXML 6.0.
#include "stdio.h"
#import <msxml3.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 schema file
IXMLDOMDocumentPtr pSchemaDoc;
hr = pSchemaDDoc.CreateInstance(__uuidof(DOMDocument30));
pSchemaDDoc->async = VARIANT_FALSE;
hr = pSchemaDDoc->load("bookschema.xdr");
//check on the parser error
if(hr!=VARIANT_TRUE)
{
return checkParseError(pSchemaDDoc->parseError);
}
//create schemachache
IXMLDOMSchemaCollectionPtr pSchemaCache;
hr = pSchemaCache.CreateInstance(__uuidof(XMLSchemaCache30));
//add schema to schema cache
hr = pSchemaCache->add("",pSchemaDDoc.GetInterfacePtr());
// load the XML file
// ****** you need to use IXMLDOMDocument2 interface *********
IXMLDOMDocument2Ptr pXMLDoc;
hr = pXMLDoc.CreateInstance(__uuidof(DOMDocument30));
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("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);
}
XML Data File: bookschema.xml
The C\C++ sample uses the following XML file.
<?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>
Schema File: bookschema.xdr
The C\C++ file uses the following XDR schema.
<?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>
Remarks
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 re-enables DTD processing.
Versioning
Implemented in:
MSXML 3.0, MSXML 6.0
Applies to
See Also
IXMLDOMSchemaCollection-XMLSchemaCache
load Method1
loadXML Method1
validate Method1