Adds schemas from another collection into the current collection and replaces any schemas that collide on the same namespace URI.
objXMLDOMSchemaCol.addCollection(objXMLDOMSchemaCollection);
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) ;
}
objXMLDOMSchemaCol.addCollection(objXMLDOMSchemaCollection)
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
HRESULT addCollection(IXMLDOMSchemaCollection * otherCollection);
#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>
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.
Applies to: IXMLDOMSchemaCollection/XMLSchemaCache