addCollection Method
Adds schemas from another collection into the current collection and replaces any schemas that collide on the same namespace URI.
[Script]
Script Syntax
objXMLDOMSchemaCol.addCollection(objXMLDOMSchemaCollection);
Parameters
- objXMLDOMSchemaCollection
- The collection containing the schemas to add.
Example
var xmldoc = new ActiveXObject("Msxml2.FreeThreadedDOMDocument.5.0"); var SchemaCache = new ActiveXObject("Msxml2.XMLSchemaCache.5.0"); var SchemaCache2 = new ActiveXObject("Msxml2.XMLSchemaCache.5.0"); xmldoc.async = false; xmldoc.validateOnParse = false; SchemaCache.add("x-schema:books", "c:\\books.xsd"); SchemaCache2.addCollection(SchemaCache); SchemaCache2.add("x-schema:books", "c:\\NewBooks.xsd"); xmldoc.schemas = SchemaCache2; // The document will load only if a valid schema is attached to the xml // file. The new schema will override the old one xmldoc.load("c:\\books.xml"); if (xmlDoc.parseError.errorCode <> 0) { var myErr = xmlDoc.parseError; alert("You have error " + myErr.reason); } else { alert(xmldoc.xml) ; }
[Visual Basic]
Visual Basic Syntax
objXMLDOMSchemaCol.addCollection(objXMLDOMSchemaCollection)
Parameters
- objXMLDOMSchemaCollection
- The collection containing the schemas to add.
Example
Dim xmldoc As New Msxml2.FreeThreadedDOMDocument50 Dim SchemaCache As New Msxml2.XMLSchemaCache50 Dim SchemaCache2 As New Msxml2.XMLSchemaCache50 xmldoc.async = False xmldoc.validateOnParse = True SchemaCache.Add "x-schema:books", "c:\books.xsd" SchemaCache2.addCollection SchemaCache SchemaCache2.Add "x-schema:books", "c:\newbooks.xsd" Set xmldoc.schemas = SchemaCache2 ' The document will load only if a valid schema is attached to the xml ' file. The new schema will override the old one. xmldoc.Load "c:\books.xml" If (xmlDoc.parseError.errorCode <> 0) Then Dim myErr Set myErr = xmlDoc.parseError MsgBox("You have error " & myErr.reason) Else MsgBox xmldoc.xml End If
[C/C++]
C/C++ Syntax
HRESULT addCollection(IXMLDOMSchemaCollection * otherCollection);
Parameters
- otherCollection [in]
- The collection containing the schemas to add.
C/C++ Return Values
- S_OK
- The value returned if the collection is added successfully.
- E_FAIL is returned if:
-
- The collection is read-only.
- The document is not a recognized schema.
- An error occurs when compiling the schema.
- The ready state of the document is not 4.
- E_POINTER
- The value returned if input pointer is invalid.
Example
#include "stdafx.h" #include "tchar.h" #import "c:\\winnt\\system32\\msxml5.dll" using namespace MSXML2; void AddCollectionSample(); int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { ::CoInitialize(NULL); AddCollectionSample(); ::CoUninitialize(); return 0; } void AddCollectionSample() { IXMLDOMDocument2Ptr pIXMLDOMDocument2; IXMLDOMSchemaCollection2Ptr pIXMLDOMSchemaCollection2Ptr; IXMLDOMSchemaCollection2Ptr pIXMLDOMSchemaCollection2Ptr2; int nResult; try { // Create the DOM nResult = pIXMLDOMDocument2.CreateInstance(__uuidof(MSXML2::DOMDocument50)); (nResult == 0) ? 0: throw nResult; // Create the Schema Collections nResult = pIXMLDOMSchemaCollection2Ptr.CreateInstance(__uuidof(MSXML2::XMLSchemaCache50)); (nResult == 0) ? 0: throw nResult; nResult = pIXMLDOMSchemaCollection2Ptr2.CreateInstance(__uuidof(MSXML2::XMLSchemaCache50)); (nResult == 0) ? 0: throw nResult; // Add the schema to the collection nResult = pIXMLDOMSchemaCollection2Ptr->add(_T("x-schema:books"), _T("c:\\books.xsd")); (nResult == 0) ? 0: throw nResult; // attach all schemas from "pIXMLDOMSchemaCollection2Ptr" nResult = pIXMLDOMSchemaCollection2Ptr2->addCollection(pIXMLDOMSchemaCollection2Ptr.GetInterfacePtr()); (nResult == 0) ? 0: throw nResult; // override the old schema nResult = pIXMLDOMSchemaCollection2Ptr2->add(_T("x-schema:books"), _variant_t(_T("c:\\Newbooks.xsd"))); (nResult == 0) ? 0: throw nResult; // Attach schemas pIXMLDOMDocument2->schemas = pIXMLDOMSchemaCollection2Ptr2.GetInterfacePtr(); pIXMLDOMDocument2->async = false; pIXMLDOMDocument2->validateOnParse = true; // Load the document into the DOM nResult = pIXMLDOMDocument2->load(_T("c:\\books.xml")); (nResult == -1) ? 0: throw nResult; ::MessageBox(NULL, pIXMLDOMDocument2->xml, _T("Loaded Document"), MB_OK); } catch(...) { ::MessageBox(NULL, _T("Sample Failed"), _T("Error"), MB_OK); } }
File Name: c:\books.xml
<?xml version='1.0'?> <Collection xmlns="x-schema:books"> <Book> <Title>Lover Birds</Title> <Author>Cynthia Randall</Author> <Publisher>Lucerne Publishing</Publisher> </Book> </Collection>
File Name: c:\books.xsd
<?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> <xs:element name="Collection"> <xs:complexType> <xs:sequence> <xs:element name="OtherBook"> <xs:complexType> <xs:sequence> <xs:element name="Title" type="xs:string"/> <xs:element name="Author" type="xs:string"/> <xs:element name="Publisher" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
File Name: c:\NewBooks.xsd
<?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> <xs:element name="Collection"> <xs:complexType> <xs:sequence> <xs:element name="Book"> <xs:complexType> <xs:sequence> <xs:element name="Title" type="xs:string"/> <xs:element name="Author" type="xs:string"/> <xs:element name="Publisher" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
Output (in a message box)
<?xml version='1.0'?> <Collection xmlns="x-schema:books"> <Book> <Title>Lover Birds</Title> <Author>Cynthia Randall</Author> <Publisher>Lucerne Publishing</Publisher> </Book> </Collection>
Remarks
There is no guarantee that the two collections will return exactly the same schema. The collection is free to clone them, if necessary.
Adding a collection to itself has no effect.
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.
See Also
Applies to: IXMLDOMSchemaCollection/XMLSchemaCache